python查找文字在图片中的位置_python实现简单图片文字识别翻译OCR
生活随笔
收集整理的這篇文章主要介紹了
python查找文字在图片中的位置_python实现简单图片文字识别翻译OCR
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
場景描述
實現類似微信掃一掃中翻譯功能,即拍照商品,一般為英語、韓語、日語等商品描述,進行文字識別后,進行在線翻譯。
圖片識別翻譯前
圖片識別翻譯后
第一步引入所需要的庫
from PIL import ImageFontfrom PIL import Imagefrom PIL import ImageDrawimport hashlibfrom urllib import parsefrom urllib import requestimport randomimport base64import json第二步圖片文字識別ocr(翻譯)
文字識別(Optical Character Recognition,OCR),簡單講就是識別出圖片中包含的文字信息。由于這是個很深的一個領域(貧道修行尚欠),有興趣的可以關注下第三方框架openCV,在這里簡單通過第三方接口有道智云來實現,其他如百度等也都有免費的接口提供。之所以選有道,主要考慮是一般僅支持一個外文翻譯為中文,有道智云相對而言多種一起識別,其次直接就幫我翻譯成中文了,比較簡單直接上代碼。
# 替換成您的應用IDappKey = "29df4hs2342"# 替換您的應用密鑰appSecret = "9bPJj8Lh7933hlJHGOLJDSocTRh"# 參數部分f = open(r'd_4.png', 'rb') # 二進制方式打開圖文件q = base64.b64encode(f.read()) # 讀取文件內容,轉換為base64編碼q = q.decode('UTF-8', 'strict')f.close()# 源語言fromLan = "en"# 目標語言to = "zh-CHS"# 上傳類型type = "1"# 隨機數,自己隨機生成,建議時間戳salt = random.randint(1, 65536)# 簽名sign = appKey + q + str(salt) + appSecretm1 = hashlib.md5()m1.update(sign.encode("utf8"))sign = m1.hexdigest()data = {'appKey': appKey, 'q': q, 'from': fromLan, 'to': to, 'type': type, 'salt': str(salt), 'sign': sign}data = parse.urlencode(data).encode(encoding='UTF8')req = request.Request('http://openapi.youdao.com/ocrtransapi', data)response = request.urlopen(req)res = response.read()res = json.loads(res, encoding='utf-8')resRegions = res['resRegions']# 輸出識別內容for i in resRegions: print(i)第三步根據定位替換圖片文字
這一步主要涉及python的PIL庫,這個庫很強大,主要用于圖片的各種處理,可以自行根據python版本進行安裝,python2.X和python3.X會有稍微區別。
# 繪制圖片def dw(boundingBox, linesCount, lineheight, tranContent): # 文本box起點x,y,寬,高 x, y, w, h = boundingBox.split(',') x = int(x) y = int(y) w = int(w) h = int(h) # 設置字體字號 word_size = int(lineheight) word_css = "msyh.ttf" font = ImageFont.truetype(word_css, word_size) # 繪制文字 W, H = font.getsize(tranContent) # 文字總長和高 if W > w and int(linesCount) > 1: word_len = len(tranContent) r = w / W limit = int(w / word_size) i = limit tranContent = list(tranContent) while i < word_len: tranContent.insert(i, '') i += limit + 1 tranContent = ''.join(tranContent) X = x + w Y = y + h # 繪制矩形 draw.rectangle((x, y, X, Y), 'yellowgreen', 'wheat') draw.text((x, y), tranContent, 'DimGrey', font=font)if __name__ == "__main__": im = Image.open('d_4.png') textAngle = res['textAngle'] imNew = im.rotate(float(textAngle)) draw = ImageDraw.Draw(imNew) for resRegion in resRegions: boundingBox = resRegion['boundingBox'] linesCount = resRegion['linesCount'] lineheight = resRegion['lineheight'] tranContent = resRegion['tranContent'] dw(boundingBox, linesCount, lineheight, tranContent) imNew = imNew.rotate(-float(textAngle)) del draw # im.save('test.png') imNew.show() imNew.close()小結
以上代碼放在一起就可以跑通,代碼寫的比較稀碎,只是簡單實現這么一個圖片文字識別翻譯的場景,有興趣的可以自行研究下OCR實現。
總結
以上是生活随笔為你收集整理的python查找文字在图片中的位置_python实现简单图片文字识别翻译OCR的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: DDD学习笔记一
- 下一篇: iis6 配置python CGI