健康碼顏色識別和信息提取

背景

????疫情已經(jīng)持續(xù)很久撞蜂,打算做一個健康碼顏色識別和信息提取的應(yīng)用匹层。本文采用opencv
和PaddleOCR疼邀、Flask來完成

PaddleOCR

????PaddleOCR旨在打造一套豐富代承、領(lǐng)先琅翻、且實(shí)用的OCR工具庫焙蹭,助力開發(fā)者訓(xùn)練出更好的模型晒杈,并應(yīng)用落地。

OpenCV

????OpenCV是一個基于Apache2.0許可(開源)發(fā)行的跨平臺計算機(jī)視覺機(jī)器學(xué)習(xí)軟件庫孔厉,可以運(yùn)行在Linux拯钻、WindowsAndroidMac OS操作系統(tǒng)上撰豺。 [1] 它輕量級而且高效——由一系列 C 函數(shù)和少量 C++ 類構(gòu)成粪般,同時提供了Python、Ruby污桦、MATLAB等語言的接口亩歹,實(shí)現(xiàn)了圖像處理和計算機(jī)視覺方面的很多通用算法。

Flask

????Flask是一個輕量級的可定制框架凡橱,使用Python語言編寫小作,較其他同類型框架更為靈活、輕便稼钩、安全且容易上手顾稀。它可以很好地結(jié)合MVC模式進(jìn)行開發(fā),開發(fā)人員分工合作坝撑,小型團(tuán)隊在短時間內(nèi)就可以完成功能豐富的中小型網(wǎng)站或Web服務(wù)的實(shí)現(xiàn)静秆。另外,F(xiàn)lask還有很強(qiáng)的定制性巡李,用戶可以根據(jù)自己的需求來添加相應(yīng)的功能抚笔,在保持核心功能簡單的同時實(shí)現(xiàn)功能的豐富與擴(kuò)展,其強(qiáng)大的插件庫可以讓用戶實(shí)現(xiàn)個性化的網(wǎng)站定制击儡,開發(fā)出功能強(qiáng)大的網(wǎng)站塔沃。

微信二維碼識別

????結(jié)合傳統(tǒng)計算機(jī)視覺和深度學(xué)習(xí)技術(shù),微信掃碼引擎解決了一圖多碼、大圖小碼蛀柴、魯棒解碼等業(yè)務(wù)痛點(diǎn)和技術(shù)難點(diǎn)螃概。只需3行代碼,輕松擁有微信的掃碼能力鸽疾。

import cv2

detector = cv2.wechat_qrcode_WeChatQRCode("detect.prototxt", "detect.caffemodel", "sr.prototxt", "sr.caffemodel")
img = cv2.imread("img.jpg")
res, points = detector.detectAndDecode(img)

print(res, points)

????從上面的代碼中可獲取二維碼的范圍吊洼,接下來主要使用預(yù)定好的顏色范圍去生成等值線,判斷是否存在


# 檢測顏色
def detect_color(image, color):
    hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)  # HSV
    inRange_hsv = cv2.inRange(hsv, color_dist[color]['Lower'], color_dist[color]['Upper'])
    contours = cv2.findContours(inRange_hsv.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)[-2]
    if len(contours) > 0 and draw_color_area(image, contours) > 0:
        return True
    else:
        return False

# 標(biāo)記顏色區(qū)域
def draw_color_area(image, contours):
    allarea, index = 0, -1
    for i in range(len(contours)):
        area = cv2.contourArea(contours[i])
        allarea = area + allarea
    return allarea

文字識別

????文字識別中主要使用了paddleocr制肮,目前用的笨辦法全部識別出來以后再去用正則表達(dá)式去匹配出合適的文字冒窍,主要是關(guān)注核酸時間和是否陰性。為了能離線使用豺鼻,最好提前下載好模型文件综液。
初始化代碼:

ocr = PaddleOCR(rec_model_dir='./ocr/rec/ch/ch_PP-OCRv3_rec_infer',det_model_dir='./ocr/det/ch/ch_PP-OCRv3_det_infer', cls_model_dir='./ocr/cls/ch_ppocr_mobile_v2.0_cls_infer')

文字識別代碼:

def getText(img):
    res = ocr.ocr(img, det=True, cls=False)
    pattern = re.compile('[0-9]+')
    qgtime = '暫無數(shù)據(jù)'
    isYin = ''
    for i in res:
        #print(i)
        match= pattern.findall(i[1][0])
        if (i[1][0].find(u"小時")>-1 or i[1][0].find(u"天")>-1) and match:
            qgtime=i[1][0]
        if (i[1][0].find(u"陰")>-1 or i[1][0].find(u"陽")>-1) and i[1][0].find(u"性")>-1:
            isYin=i[1][0]
    return qgtime,isYin

上傳文件接口

????用戶要通過上傳圖片文件來完成識別操作,這時候就需要使用flask儒飒。
上傳接口需要簡單設(shè)置下跨域(方便調(diào)試)以及路由接口谬莹,同時要驗(yàn)證文件后綴名,以保證上傳指定的文件桩了。

# 判斷文件是否合法
def allowed_file(filename):
    return '.' in filename and filename.rsplit('.', 1)[1] in ALLOWED_EXTENSIONS

@app.route('/detect', methods=['POST'], strict_slashes=False)
@cross_origin(supports_credentials=True)
def dataDectect():
    #print(datetime.datetime.now())
    starttime = datetime.datetime.now()
    file_dir = os.path.join(basedir, app.config['UPLOAD_FOLDER'])  # 拼接成合法文件夾地址

    file_dir = app.config['UPLOAD_FOLDER']  # 拼接成合法文件夾地址
    if not os.path.exists(file_dir):
        os.makedirs(file_dir)  # 文件夾不存在就創(chuàng)建
    f = request.files['img']  # 從表單的file字段獲取文件附帽,myfile為該表單的name值
    if f and allowed_file(f.filename):  # 判斷是否是允許上傳的文件類型
        fname = f.filename
        ext = fname.rsplit('.', 1)[1]  # 獲取文件后綴
        unix_time = int(time.time())
        new_filename = str(unix_time) + '.' + ext  # 修改文件名
        filePath = os.path.join(file_dir, new_filename)
        #print(datetime.datetime.now())
        f.save(filePath)  # 保存文件到upload目錄

        #print(datetime.datetime.now())
        img = cv2.imread(filePath)
        codeName = webchatQrDetect(img)

        qrtime,isYin=getText(img)
        endtime = datetime.datetime.now()
        duringtime = endtime - starttime
        os.remove(filePath)
        #print(datetime.datetime.now())
        #print('the work use ', duringtime. microseconds/1000000)
        # print('the work end', datetime.datetime.now(), datetime.datetime.now())
        return jsonify({ "運(yùn)行時間":str(round(duringtime. seconds,3))+'s',"msg": "上傳成功",u"核酸時間": qrtime,u'狀態(tài)':isYin, u"健康碼": codeName})
    else:
        return jsonify({"msg": "上傳失敗"})

項(xiàng)目效果

????通過postman可以調(diào)用接口進(jìn)行測試


image.png

參考資料:

https://baike.baidu.com/item/Flask/1241509

https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.6/README_ch.md

https://github.com/WeChatCV/opencv_3rdparty

https://zhuanlan.zhihu.com/p/417226916

https://blog.yuanpei.me/posts/1509692610/

https://zhuanlan.zhihu.com/p/401841723

https://github.com/PaddlePaddle/PaddleOCR

https://ai.baidu.com/support/news?action=detail&id=2912

https://blog.csdn.net/Mrli0530/article/details/122185635

https://zhuanlan.zhihu.com/p/430174498

https://blog.csdn.net/Kukeoo/article/details/116245337

https://blog.csdn.net/qq_36853469/article/details/106416128

https://blog.csdn.net/juzicode00/article/details/122205315

https://zhuanlan.zhihu.com/p/348349456

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市井誉,隨后出現(xiàn)的幾起案子蕉扮,更是在濱河造成了極大的恐慌,老刑警劉巖颗圣,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件喳钟,死亡現(xiàn)場離奇詭異,居然都是意外死亡欠啤,警方通過查閱死者的電腦和手機(jī)荚藻,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來洁段,“玉大人,你說我怎么就攤上這事共郭§羲浚” “怎么了?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵除嘹,是天一觀的道長写半。 經(jīng)常有香客問我,道長尉咕,這世上最難降的妖魔是什么叠蝇? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮年缎,結(jié)果婚禮上悔捶,老公的妹妹穿的比我還像新娘铃慷。我一直安慰自己,他們只是感情好蜕该,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布犁柜。 她就那樣靜靜地躺著,像睡著了一般堂淡。 火紅的嫁衣襯著肌膚如雪馋缅。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天绢淀,我揣著相機(jī)與錄音萤悴,去河邊找鬼。 笑死皆的,一個胖子當(dāng)著我的面吹牛稚疹,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播祭务,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼内狗,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了义锥?” 一聲冷哼從身側(cè)響起柳沙,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎拌倍,沒想到半個月后赂鲤,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡柱恤,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年数初,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片梗顺。...
    茶點(diǎn)故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡泡孩,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出寺谤,到底是詐尸還是另有隱情仑鸥,我是刑警寧澤,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布变屁,位于F島的核電站眼俊,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏粟关。R本人自食惡果不足惜疮胖,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧澎灸,春花似錦院塞、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至巩梢,卻和暖如春创泄,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背括蝠。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工鞠抑, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人忌警。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓搁拙,卻偏偏與公主長得像,于是被迫代替她去往敵國和親法绵。 傳聞我的和親對象是個殘疾皇子箕速,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評論 2 345

推薦閱讀更多精彩內(nèi)容