<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
PaddleOCR 是一個基於百度飛槳的OCR工具庫,包含總模型僅8.6M的超輕量級中文OCR,單模型支援中英文數位組合識別、豎排文字識別、長文字識別。同時支援多種文字檢測、文字識別的訓練演演算法。
本教學將介紹PaddleOCR的基本使用方法以及如何使用它開發一個自動搜題的小工具。
雖然PaddleOCR支援伺服器端部署並提供識別API,但根據我們的需求,搭建一個本地離線的OCR識別環境,所以此次我們只介紹如何在本地安裝並使用的做法。
一、環境準備
1.1 目前飛槳支援的環境
Windows 7/8/10 專業版/企業版 (64bit)
GPU版本支援CUDA 10.1/10.2/11.0/11.2,且僅支援單卡
Python 版本 3.6+/3.7+/3.8+/3.9+ (64 bit)
pip 版本 20.2.2或更高版本 (64 bit)
二、安裝命令
pip install paddlepaddle -i https://mirror.baidu.com/pypi/simple
(注意此版本為CPU版本,如需GPU版本請檢視PaddlePaddle檔案)
安裝完成後您可以使用 python
進入python直譯器,輸入import paddle
,再輸入 paddle.utils.run_check()
如果出現PaddlePaddle is installed successfully!
,說明您已成功安裝。
pip install "paddleocr>=2.0.1" # 推薦使用2.0.1+版本
安裝完成後你可以使用以下程式碼來進行簡單的功能測試
from paddleocr import PaddleOCR, draw_ocr # Paddleocr目前支援中英文、英文、法語、德語、韓語、日語,可以通過修改lang引數進行切換 # 引數依次為`ch`, `en`, `french`, `german`, `korean`, `japan`。 ocr = PaddleOCR(use_angle_cls=True, lang="ch") # need to run only once to download and load model into memory # 選擇你要識別的圖片路徑 img_path = '11.jpg' result = ocr.ocr(img_path, cls=True) for line in result: print(line) # 顯示結果 from PIL import Image image = Image.open(img_path).convert('RGB') boxes = [line[0] for line in result] txts = [line[1][0] for line in result] scores = [line[1][1] for line in result] im_show = draw_ocr(image, boxes, txts, scores, font_path='/path/to/PaddleOCR/doc/fonts/simfang.ttf') im_show = Image.fromarray(im_show) im_show.save('result.jpg')
結果是一個list,每個item包含了文字方塊,文字和識別置信度
[[[24.0, 36.0], [304.0, 34.0], [304.0, 72.0], [24.0, 74.0]], ['純臻營養護髮素', 0.964739]]
[[[24.0, 80.0], [172.0, 80.0], [172.0, 104.0], [24.0, 104.0]], ['產品資訊/引數', 0.98069626]]
[[[24.0, 109.0], [333.0, 109.0], [333.0, 136.0], [24.0, 136.0]], ['(45元/每公斤,100公斤起訂)', 0.9676722]]
......
視覺化效果
至此我們就掌握了 PaddleOCR 的基本使用,基於這個我們就能開發出一個OCR的搜題小工具了。
更多使用方法請參考
現在有很多那種答題競賽的小遊戲,在限定時間內看誰答題正確率更高。或者現在一些單位會搞一些大練兵什麼的競賽,需要在網上答題,這個時候手動輸入題目去搜尋就很慢,效率也不會太高,所以我們就可以來寫一個指令碼,幫助我們完成搜題的過程。
基本思路就是通過ADB擷取當前螢幕,然後剪下出題目所在位置,然後通過PaddleOCR來獲取題目文字,之後開啟搜尋引擎搜尋或者開啟題庫搜尋。
你可以到這裡下載安裝ADB之後設定環境變數。
設定完環境變數後在終端輸入adb,如果出現以下字元則證明adb安裝完成。
Android Debug Bridge version 1.0.41 Version 31.0.3-7562133
import os from PIL import Image # 截圖 def pull_screenshot(): os.system('adb shell screencap -p /sdcard/screenshot.png') os.system('adb pull /sdcard/screenshot.png .') img = Image.open("./screenshot.png") # 切割問題區域 # (起始點的橫座標,起始點的縱座標,寬度,高度) question = img.crop((10, 400, 1060, 1000)) # 儲存問題區域 question.save("./question.png")
ocr = PaddleOCR(use_angle_cls=False, lang="ch", show_log=False ) # need to run only once to download and load model into memory img_path = 'question.png' result = ocr.ocr(img_path, cls=False) # 獲取題目文字 questionList = [line[1][0] for line in result] text = "" # 將陣列轉換為字串 for str in questionList : text += str print(text)
import webbrowser webbrowser.open('https://baidu.com/s?wd=' + urllib.parse.quote(question))
之後你就可以檢視搜尋結果了
如果有題庫,你還可以使用pyautogui
來模擬滑鼠鍵盤操作,去操作Word等軟體在題庫中進行搜尋。
# -*- coding: utf-8 -*- # @Author : Pu Zhiwei # @Time : 2021-09-02 20:29 from PIL import Image import os import matplotlib.pyplot as plt from paddleocr import PaddleOCR, draw_ocr import pyperclip import pyautogui import time import webbrowser import urllib.parse # 滑鼠位置 currentMouseX, currentMouseY = 60, 282 # 截圖獲取當前題目 def pull_screenshot(): os.system('adb shell screencap -p /sdcard/screenshot.png') os.system('adb pull /sdcard/screenshot.png .') # 移動滑鼠到搜尋方塊搜尋 def MoveMouseToSearch(): # duration 引數,移動時間,即用時0.1秒移動到對應位置 pyautogui.moveTo(currentMouseX, currentMouseY, duration=0.1) # 左鍵點選 pyautogui.click() pyautogui.click() # 模擬組合鍵,貼上 pyautogui.hotkey('ctrl', 'v') # 擴充問題 def AddText(list, length, text): if length > 3: return text + list[3] else: return text # 開啟瀏覽器 def open_webbrowser(question): webbrowser.open('https://baidu.com/s?wd=' + urllib.parse.quote(question)) # 顯示所識別的題目 def ShowAllQuestionText(list): text = "" for str in list: text += str print(text) if __name__ == "__main__": while True: print("nn請將滑鼠放在Word的搜尋方塊上,三秒後指令碼將自動獲取Word搜尋方塊位置!nn") # 延時三秒輸出滑鼠位置 time.sleep(3) # 獲取當前滑鼠位置 currentMouseX, currentMouseY = pyautogui.position() print('當前滑鼠位置為: {0} , {1}'.format(currentMouseX, currentMouseY)) start = input("按y鍵程式開始執行,按其他鍵重新獲取搜尋方塊位置:") if start == 'y': break while True: t = time.perf_counter() pull_screenshot() img = Image.open("./screenshot.png") # 切割問題區域 # (起始點的橫座標,起始點的縱座標,寬度,高度) question = img.crop((10, 400, 1060, 1000)) # 儲存問題區域 question.save("./question.png") # 載入 PaddleOCR # Paddleocr目前支援中英文、英文、法語、德語、韓語、日語,可以通過修改lang引數進行切換 # 引數依次為`ch`, `en`, `french`, `german`, `korean`, `japan`。 # 自定義模型地址 # det_model_dir='./inference/ch_ppocr_server_v2.0_det_train', # rec_model_dir='./inference/ch_ppocr_server_v2.0_rec_pre', # cls_model_dir='./inference/ch_ppocr_mobile_v2.0_cls_train', ocr = PaddleOCR(use_angle_cls=False, lang="ch", show_log=False ) # need to run only once to download and load model into memory img_path = 'question.png' result = ocr.ocr(img_path, cls=False) questionList = [line[1][0] for line in result] length = len(questionList) text = "" if length < 1: text = questionList[0] elif length == 2: text = questionList[1] else: text = questionList[1] + questionList[2] print('nn') ShowAllQuestionText(questionList) # 將結果寫入剪下板 pyperclip.copy(text) # 點選搜尋 MoveMouseToSearch() # 計算時間 print('nn') end_time3 = time.perf_counter() print('用時: {0}'.format(end_time3 - t)) go = input('輸入回車繼續執行,輸入 e 開啟瀏覽器搜尋,輸入 a 增加題目長度,輸入 n 結束程式執行: ') if go == 'n': break if go == 'a': text = AddText(questionList, length, text) pyperclip.copy(text) # 點選搜尋 MoveMouseToSearch() stop = input("輸入回車繼續") elif go == 'e': # 開啟瀏覽器 open_webbrowser(text) stop = input("輸入回車繼續") print('n------------------------nn')
到此這篇關於Python利用PaddleOCR製作個搜題小工具 的文章就介紹到這了,更多相關Python PaddleOCR搜題工具 內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45