最近看到複旦大學信息科學與工程學院博士生利用Python OCR和正則表達式開發一段代碼可以快速的核查幾百人的核酸結果。OCR光學字符識别軟件開發時基本都是調用的别人的OCR文字識别服務。根據經驗OCR的識别有一定的難度最少對圖片的清晰度是有要求。心想Python的OCR文本識别庫已經發展的這麼高精準了麼?耳聽為虛動手為實開始寫代碼。今天就為大家介紹下利用Python OCR庫識别防疫健康碼截圖的文本信息。
1、安裝OCR庫
#這次裝了不少的庫主要是庫之間有依賴
pip3 install common dual tight data prox shapely paddle paddleocr paddlepaddle
2、文本識别
from paddleocr import PaddleOCR, draw_ocr
from PIL import Image
ocr = PaddleOCR(use_angle_cls=True, lang='ch')
img_path = '/Users/linux/Downloads/WechatIMG1.jpeg'
result = ocr.ocr(img_path, cls=True)
city_exist = False
for text in result:
exist = False
#print(text[1][0])
if text[1][0].find("動态行程卡") > -1:
exist = True
elif text[1][0].find('更新于') > -1:
exist = True
elif text[1][0].find('14天内到達') > -1:
city_exist = True
elif text[1][0].find("結果包含") > -1:
city_exist = False
if exist == True or city_exist == True:
print(text[1][0])
if text[1][0].find("綠色行程卡") > -1:
print("綠色")
elif text[1][0].find("紅色行程卡") > -1:
print("紅色")
3、健康碼識别結果
(圖一)
(圖二)
(圖三)
小程序 |
健康碼截圖 |
識别結果 |
通信行程卡 |
(如上圖一) |
綠色
xxx****xxxx的動态行程卡 更新于:2022.04.1115:15:42 您于前14天内到達或途經:河北省xxxx市 |
北京健康寶 |
(如上圖三) |
2022年04月11日 15:17:54 未見異常① 名: 姓 x* 身份證号: 查詢時間: 04-1115:17 失效時間: 04-1124:00 |
河北健康碼 |
(如上圖二) |
河北健康碼 姓名 x*x 身份證号 xxxx**********xxxx 2022-04-1115:15:58 核酸檢測:陰性(2021-11-26 檢測機構:北京xxxx醫院(西城院區) |
4、顔色識别
代碼中我們是根據識别的文本來判斷是綠碼還是紅碼,難免根據小程序的升級判斷結果有誤。希望可以根據截圖的圖片的主要顔色來判斷綠碼還是紅碼保險準确些。
import colorsys
import PIL.Image as Image
def get_dominant_color(image):
max_score = 0.0001
dominant_color = None
for count,(r,g,b) in image.getcolors(image.size[0]*image.size[1]):
# 轉為HSV标準
saturation = colorsys.rgb_to_hsv(r/255.0, g/255.0, b/255.0)[1]
y = min(abs(r*2104 g*4130 b*802 4096 131072)>>13,235)
y = (y-16.0)/(235-16)
#忽略高亮色
if y > 0.9:
continue
score = (saturation 0.1)*count
if score > max_score:
max_score = score
dominant_color = (r,g,b)
return dominant_color
if __name__ == '__main__':
image = Image.open('/Users/linux/Downloads/WechatIMG1.jpeg')
image = image.convert('RGB')
print(get_dominant_color(image))
執行結果:
(83, 164, 108)[RGB綠色]
5、結論
根據我們識别通信行程卡、北京健康寶、河北健康碼的截圖。整體OCR的識别還是很準确的。基本上重要的我們想要的數據都可以識别出來,以後可以多用PaddleOCR庫識别圖片。大家有什麼不同的觀點可以提出來溝通讨論。
感謝大家的評論、點贊、分享、關注。。。
,