iT邦幫忙

0

OCR 圖片判讀不出來疑問

不明 2023-01-05 15:45:391618 瀏覽
  • 分享至 

  • xImage

版上各位大神好,

小弟最近在研究OCR辨識的相關技術,
自己搜尋版上以及其他網站的教學並嘗試自己試做,
目前只要不管是以實際拍照或者螢幕截圖的方式,
只要遇到「數字」皆會出現無法識別的問題...
有經過二值化、色彩對比、亮度等圖片調整,再進行判讀,
目前嘗試使用pytesseract及easyocr兩種套件進行練習皆會遇到這樣的疑問,

程式碼
圖1

from PIL import Image
import pytesseract, cv2, numpy as np, easyocr, datetime, os, requests
path = "img"
jpg = "{}/original/3333.jpg".format(path)

img = cv2.imread(jpg, cv2.IMREAD_REDUCED_GRAYSCALE_2)
img = img[105:165, 115:600]
contrast, brightness = 500, 0
output = img * (contrast/127 + 1) - contrast + brightness
ret, output = cv2.threshold(output, 127, 255, cv2.THRESH_BINARY_INV)
af_img = "{}/after_treatment/{}.jpg".format(path, datetime.datetime.now().strftime("%Y%m%d"))
cv2.imwrite(af_img, output, [cv2.IMWRITE_JPEG_QUALITY, 80])
reader.readtext(af_img)

圖2

from PIL import Image
import pytesseract, cv2, numpy as np, easyocr, datetime, os, requests
path = "img"
reader = easyocr.Reader(['en'])
jpg = "{}/original/2222.jpg".format(path)
now_date, now_datetime = datetime.datetime.now().strftime("%Y-%m-%d"), datetime.datetime.now().strftime("%H : %M")
def img_ocr(img):
    img = cv2.imread(img, cv2.IMREAD_REDUCED_COLOR_8)
    img = img[230:270, 115:190]
    # 曝光& 亮度調整
    contrast, brightness = 200, 0
    output = img * (contrast/127 + 1) - contrast + brightness
    output = 255-output

    af_img = "{}/after_treatment/{}.jpg".format(path, datetime.datetime.now().strftime("%Y%m%d"))

    cv2.imwrite(af_img, output, [cv2.IMWRITE_JPEG_QUALITY, 80])

    result = reader.readtext(af_img)[0][1].replace(" ","")
    return "{} 度".format(result)

原始圖片
圖1
https://ithelp.ithome.com.tw/upload/images/20230105/201566793nck2c3ymJ.png
圖2
https://ithelp.ithome.com.tw/upload/images/20230105/20156679hJmm7HUx30.jpg

處理後
圖1
https://ithelp.ithome.com.tw/upload/images/20230105/20156679GgVZfkFLRj.jpg
圖2
https://ithelp.ithome.com.tw/upload/images/20230105/20156679DaPpef1ugZ.jpg

※由於圖片內容包含其他資訊不便公開,因此僅供自行剪裁後的圖片。
※程式小白,傷眼抱歉,敬請叮嚀指教!

player iT邦大師 1 級 ‧ 2023-01-05 19:12:02 檢舉
個人意見
要看OCR的運作計算原理是哪一種的?
據我所知
有的OCR要得在OS裡有對應的字型
才判斷得出來
如果不是這個原因的話
可能得調整點陣圖檔量化成向量的相關參數 (視OCR的相關套件而定)
你自己研究吧,祝好運
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

0
hipig
iT邦見習生 ‧ 2023-01-07 15:05:11

給你兩個方向

  1. Seven-segment display的樣式是固定的,通常我們在對這類設備做OCR時會直接使用樣板並比較相似度的方式,先將所有的字建起來然後比較,說穿了不會用到任何進階OCR會使用的技術,而是直接又暴力的用比對比出來
  2. 針對任何工控類的設備,除非必要不然不要用看的,而是直接針對硬體或設計下去分析,從實體上用公開的通訊協定輸(偷)出資料來,尤其是錶頭或HMI。這顆是Eliwell EWPC 901/T吧

我要發表回答

立即登入回答