pbootcms网站模板|日韩1区2区|织梦模板||网站源码|日韩1区2区|jquery建站特效-html5模板网

根據(jù)文本方向檢測圖像方向角度

Detect image orientation angle based on text direction(根據(jù)文本方向檢測圖像方向角度)
本文介紹了根據(jù)文本方向檢測圖像方向角度的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

問題描述

我正在執(zhí)行一項 OCR 任務,以從多個身份證明文件中提取信息.一個挑戰(zhàn)是掃描圖像的方向.需要固定 PAN、Aadhaar、駕駛執(zhí)照或任何身份證明的掃描圖像的方向.

已經在 Stackoverflow 和其他論壇上嘗試過所有建議的方法,例如 OpenCV minAreaRect、霍夫線變換、FFT、單應性、具有 psm 0 的 tesseract osd.沒有一個有效.

邏輯應返回文本方向的角度 - 0、90 和 270 度.附上0、90、270度的圖片.這與確定偏度無關.

解決方案

這是一種基于大部分文本偏向一側的假設的方法.這個想法是我們可以根據(jù)主要文本區(qū)域的位置來確定角度

  • 將圖像轉換為灰度和高斯模糊
  • 獲取二值圖像的自適應閾值
  • 使用輪廓區(qū)域查找輪廓和過濾
  • 在蒙版上繪制過濾輪廓
  • 根據(jù)方向水平或垂直分割圖像
  • 計算每一半的像素數(shù)

轉換為灰度和高斯模糊后,我們自適應閾值得到二值圖像

從這里我們找到輪廓并使用輪廓區(qū)域進行過濾以去除小的噪聲顆粒和大的邊界.我們將通過此過濾器的任何輪廓繪制到蒙版上

為了確定角度,我們根據(jù)圖像的尺寸將圖像分成兩半.如果 <代碼> 寬度 >height 那么它必須是水平圖像,所以我們垂直分成兩半.如果 <代碼> 高度 >寬度 那么它必須是垂直圖像所以我們水平分割成兩半

現(xiàn)在我們有兩半,我們可以使用 cv2.countNonZero() 來確定每一半的白色像素的數(shù)量.以下是確定角度的邏輯:

如果是水平的如果左 >= 右度->0別的度->180如果垂直如果頂部 >= 底部度->270別的度->90

<塊引用>

離開9703

右 3975

因此圖像是 0 度.這是其他方向的結果

<塊引用>

離開 3975

右 9703

我們可以得出結論,圖像翻轉了 180 度

這是垂直圖像的結果.注意因為它是一個垂直的圖像,我們水平分割

<塊引用>

前 3947 個

底部 9550

因此結果是90度

導入 cv2將 numpy 導入為 npdef 檢測角度(圖像):掩碼 = np.zeros(image.shape,dtype=np.uint8)灰色 = cv2.cvtColor(圖像,cv2.COLOR_BGR2GRAY)模糊 = cv2.GaussianBlur(灰色, (3,3), 0)自適應 = cv2.adaptiveThreshold(blur,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY_INV,15,4)cnts = cv2.findContours(自適應,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)cnts = cnts[0] 如果 len(cnts) == 2 否則 cnts[1]對于 cnts 中的 c:面積 = cv2.contourArea(c)如果面積 <45000 和區(qū)域 >20:cv2.drawContours(掩碼,[c],-1,(255,255,255),-1)掩碼 = cv2.cvtColor(掩碼,cv2.COLOR_BGR2GRAY)h, w = mask.shape# 水平的如果 w >H:左 = 掩碼[0:h, 0:0+w//2]右 = 掩碼 [0:h, w//2:]left_pixels = cv2.countNonZero(左)right_pixels = cv2.countNonZero(右)如果 left_pixels >= right_pixels 則返回 0 否則 180# 垂直的別的:頂部 = 掩碼[0:h//2, 0:w]底部 = 掩碼[h//2:, 0:w]top_pixels = cv2.countNonZero(top)bottom_pixels = cv2.countNonZero(底部)如果 bottom_pixels >= top_pixels 則返回 90,否則返回 270如果 __name__ == '__main__':圖像 = cv2.imread('1.png')角度 = 檢測角度(圖像)打印(角度)

I am working on a OCR task to extract information from multiple ID proof documents. One challenge is the orientation of the scanned image. The need is to fix the orientation of the scanned image of PAN, Aadhaar, Driving License or any ID proof.

Already tried all suggested approaches on Stackoverflow and other forums such as OpenCV minAreaRect, Hough Lines Transforms, FFT, homography, tesseract osd with psm 0. None are working.

The logic should return the angle of the text direction - 0, 90 and 270 degrees. Attached are the images of 0, 90 and 270 degrees. This is not about determining the skewness.

解決方案

Here's an approach based on the assumption that the majority of the text is skewed onto one side. The idea is that we can determine the angle based on the where the major text region is located

  • Convert image to grayscale and Gaussian blur
  • Adaptive threshold to get a binary image
  • Find contours and filter using contour area
  • Draw filtered contours onto mask
  • Split image horizontally or vertically based on orientation
  • Count number of pixels in each half

After converting to grayscale and Gaussian blurring, we adaptive threshold to obtain a binary image

From here we find contours and filter using contour area to remove the small noise particles and the large border. We draw any contours that pass this filter onto a mask

To determine the angle, we split the image in half based on the image's dimension. If width > height then it must be a horizontal image so we split in half vertically. if height > width then it must be a vertical image so we split in half horizontally

Now that we have two halves, we can use cv2.countNonZero() to determine the amount of white pixels on each half. Here's the logic to determine angle:

if horizontal
    if left >= right 
        degree -> 0
    else 
        degree -> 180
if vertical
    if top >= bottom
        degree -> 270
    else
        degree -> 90

left 9703

right 3975

Therefore the image is 0 degrees. Here's the results from other orientations

left 3975

right 9703

We can conclude that the image is flipped 180 degrees

Here's results for vertical image. Note since its a vertical image, we split horizontally

top 3947

bottom 9550

Therefore the result is 90 degrees

import cv2
import numpy as np

def detect_angle(image):
    mask = np.zeros(image.shape, dtype=np.uint8)
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    blur = cv2.GaussianBlur(gray, (3,3), 0)
    adaptive = cv2.adaptiveThreshold(blur,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY_INV,15,4)

    cnts = cv2.findContours(adaptive, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
    cnts = cnts[0] if len(cnts) == 2 else cnts[1]

    for c in cnts:
        area = cv2.contourArea(c)
        if area < 45000 and area > 20:
            cv2.drawContours(mask, [c], -1, (255,255,255), -1)

    mask = cv2.cvtColor(mask, cv2.COLOR_BGR2GRAY)
    h, w = mask.shape
    
    # Horizontal
    if w > h:
        left = mask[0:h, 0:0+w//2]
        right = mask[0:h, w//2:]
        left_pixels = cv2.countNonZero(left)
        right_pixels = cv2.countNonZero(right)
        return 0 if left_pixels >= right_pixels else 180
    # Vertical
    else:
        top = mask[0:h//2, 0:w]
        bottom = mask[h//2:, 0:w]
        top_pixels = cv2.countNonZero(top)
        bottom_pixels = cv2.countNonZero(bottom)
        return 90 if bottom_pixels >= top_pixels else 270

if __name__ == '__main__':
    image = cv2.imread('1.png')
    angle = detect_angle(image)
    print(angle)

這篇關于根據(jù)文本方向檢測圖像方向角度的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!

【網站聲明】本站部分內容來源于互聯(lián)網,旨在幫助大家更快的解決問題,如果有圖片或者內容侵犯了您的權益,請聯(lián)系我們刪除處理,感謝您的支持!

相關文檔推薦

How to draw a rectangle around a region of interest in python(如何在python中的感興趣區(qū)域周圍繪制一個矩形)
How can I detect and track people using OpenCV?(如何使用 OpenCV 檢測和跟蹤人員?)
How to apply threshold within multiple rectangular bounding boxes in an image?(如何在圖像的多個矩形邊界框中應用閾值?)
How can I download a specific part of Coco Dataset?(如何下載 Coco Dataset 的特定部分?)
Detect centre and angle of rectangles in an image using Opencv(使用 Opencv 檢測圖像中矩形的中心和角度)
Calculating percentage of Bounding box overlap, for image detector evaluation(計算邊界框重疊的百分比,用于圖像檢測器評估)
主站蜘蛛池模板: 泉州陶瓷pc砖_园林景观砖厂家_石英砖地铺石价格 _福建暴风石英砖 | Safety light curtain|Belt Sway Switches|Pull Rope Switch|ultrasonic flaw detector-Shandong Zhuoxin Machinery Co., Ltd | 400电话_400电话申请_888元包年_400电话办理服务中心_400VIP网 | 中视电广_短视频拍摄_短视频推广_短视频代运营_宣传片拍摄_影视广告制作_中视电广 | 骨密度仪-骨密度测定仪-超声骨密度仪-骨龄测定仪-天津开发区圣鸿医疗器械有限公司 | 西点培训学校_法式西点培训班_西点师培训_西点蛋糕培训-广州烘趣西点烘焙培训学院 | 服务器之家 - 专注于服务器技术及软件下载分享 | 工业PH计|工业ph酸度计|在线PH计价格-合肥卓尔仪器仪表有限公司 济南画室培训-美术高考培训-山东艺霖艺术培训画室 | 酒吧霸屏软件_酒吧霸屏系统,酒吧微上墙,夜场霸屏软件,酒吧点歌软件,酒吧互动游戏,酒吧大屏幕软件系统下载 | 品牌设计_VI设计_电影海报设计_包装设计_LOGO设计-Bacross新越品牌顾问 | 西安烟道厂家_排气道厂家_包立管厂家「陕西西安」推荐西安天宇烟道 | 工业用品一站式采购平台|南创工品汇-官网|广州南创 | 小型高低温循环试验箱-可程式高低温湿热交变试验箱-东莞市拓德环境测试设备有限公司 | 海鲜池-专注海鲜鱼缸、移动海鲜缸、饭店鱼缸设计定做-日晟水族厂家 | 整合营销推广|营销网络推广公司|石家庄网站优化推广公司|智营销 好物生环保网、环保论坛 - 环保人的学习交流平台 | 单电机制砂机,BHS制砂机,制沙机设备,制砂机价格-正升制砂机厂家 单级/双级旋片式真空泵厂家,2xz旋片真空泵-浙江台州求精真空泵有限公司 | 在线浊度仪_悬浮物污泥浓度计_超声波泥位计_污泥界面仪_泥水界面仪-无锡蓝拓仪表科技有限公司 | 韦伯电梯有限公司| 北京企业宣传片拍摄_公司宣传片制作-广告短视频制作_北京宣传片拍摄公司 | 球磨机 选矿球磨机 棒磨机 浮选机 分级机 选矿设备厂家 | 道达尔润滑油-食品级润滑油-道达尔导热油-合成导热油,深圳道达尔代理商合-深圳浩方正大官网 | 防火门|抗爆门|超大门|医疗门|隔声门-上海加汇门业生产厂家 | 合肥汽车充电桩_安徽充电桩_电动交流充电桩厂家_安徽科帝新能源科技有限公司 | 哈尔滨发电机,黑龙江柴油发电机组-北方星光 | 危废处理系统,水泥厂DCS集散控制系统,石灰窑设备自动化控制系统-淄博正展工控设备 | 高精度-恒温冷水机-螺杆式冰水机-蒸发冷冷水机-北京蓝海神骏科技有限公司 | 临朐空调移机_空调维修「空调回收」临朐二手空调 | 折弯机-刨槽机-数控折弯机-数控刨槽机-数控折弯机厂家-深圳豐科机械有限公司 | [品牌官网]贵州遵义双宁口腔连锁_贵州遵义牙科医院哪家好_种植牙_牙齿矫正_原华美口腔 | 悬浮拼装地板_篮球场木地板翻新_运动木地板价格-上海越禾运动地板厂家 | 新密高铝耐火砖,轻质保温砖价格,浇注料厂家直销-郑州荣盛窑炉耐火材料有限公司 | NM-02立式吸污机_ZHCS-02软轴刷_二合一吸刷软轴刷-厦门地坤科技有限公司 | 学叉车培训|叉车证报名|叉车查询|叉车证怎么考-工程机械培训网 | 耐腐蚀泵,耐腐蚀真空泵,玻璃钢真空泵-淄博华舜耐腐蚀真空泵有限公司 | 粉碎机_塑料粉碎机_塑料破碎机厂家-星标机械 | 水性绝缘漆_凡立水_绝缘漆树脂_环保绝缘漆-深圳维特利环保材料有限公司 | 背压阀|减压器|不锈钢减压器|减压阀|卫生级背压阀|单向阀|背压阀厂家-上海沃原自控阀门有限公司 本安接线盒-本安电路用接线盒-本安分线盒-矿用电话接线盒-JHH生产厂家-宁波龙亿电子科技有限公司 | 自清洗过滤器_全自动过滤器_全自动反冲洗过滤器_量子过滤器-滑漮滴 | 温室大棚建设|水肥一体化|物联网系统 | 短信营销平台_短信群发平台_106短信发送平台-河南路尚 | 科箭WMS仓库管理软件-TMS物流管理系统-科箭SaaS云服务 |