實現一個功能,截一張圖片,利用百度文字識別技術識別出圖片內容,然后利用在線翻譯網站翻譯此內容。
實現此功能的前提是電腦有截屏功能,此文利用的是QQ截屏的功能,當然也可以使用微信截屏功能等,只不過快捷鍵不同罷了。
第一步,清空剪切板,需要導入from ctypes import windll, c_int這些方法,剪切板中的圖片存放在內存中。
# ============== 清空剪切板, c_int(0)內存中的存儲區域 user32 = windll.user32 # 打開剪切板 user32.OpenClipboard(c_int(0)) # 清空剪切板 user32.EmptyClipboard() # 關閉剪切板 user32.CloseClipboard()
第二步,截屏,因為用的QQ截屏,所以快捷鍵是ctrl+alt+a,wait()函數會在此阻塞,直到你按下截屏鍵才會往下繼續
# 檢測鍵盤按下,沒檢測到按下截圖鍵,繼續等待,檢測到了,代碼往下走。此處有個阻塞 keyboard.wait(hotkey="ctrl+alt+a")
# 獲取圖片內容 while True: image = ImageGrab.grabclipboard() if image: image.save(img_path) break else: time.sleep(2)
注意:為什么要用while True,截屏是不是需要時間去選區域,然后點完成,在這期間,剪切板上是沒有數據的,用while True只是不斷的從剪切板掃描圖片而已,當發現圖片就退出循環了。
第三步,圖片轉文字,這個是使用的百度api,另外寫的一個py文件中。
word = get_text_from_image("screen.png")
第四步,翻譯文本
result = requests.post( url="http://fy.iciba.com/ajax.php?a=fy", data={"f": "auto", "t": "auto", "w": word} ).json()
如此幾步,就可以完成一個簡單的圖片翻譯過程了。
百度api,自己可以注冊申請賬號,創建AppId、API Key、Secret Key,然后開始圖片轉文本工作,推薦博客:https://blog.csdn.net/student_zz/article/details/91491955?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase
Python文字識別快速入門鏈接:https://ai.baidu.com/ai-doc/OCR/Dk3h7yf8m
不過我倒是沒有創建新的AppId、API Key、Secret Key,直接用的博客主分享出來的,謝謝博客主的分享,鏈接:https://blog.csdn.net/qq_33333654/article/details/102723118
源碼
translation.py

#!/usr/bin/env python # _*_ coding: UTF-8 _*_ """================================================= @Project -> File : six-dialog_design -> translation.py @IDE : PyCharm @Author : zihan @Date : 2020/5/26 18:10 @Desc : 1. 清空剪切板 2. 監測鍵盤按鍵"ctrl_alt+a", 阻塞程序直到得到截圖 3. 將圖片中的文字提取出來,用的是百度雲的api 4. 翻譯文字,用的是網頁上在線翻譯的接口:http://fy.iciba.com/ =================================================""" import requests from ctypes import windll, c_int from PIL import ImageGrab import keyboard import time from aip_baidu_img2text_recognition import get_text_from_image from pprint import pprint # 清空剪切板 def clear_clipboard(): # ============== 清空剪切板, c_int(0)內存中的存儲區域 user32 = windll.user32 # 打開剪切板 user32.OpenClipboard(c_int(0)) # 清空剪切板 user32.EmptyClipboard() # 關閉剪切板 user32.CloseClipboard() # 獲取截圖 def get_image(img_path): # 獲取圖片內容 while True: image = ImageGrab.grabclipboard() if image: image.save(img_path) break else: time.sleep(2) # 翻譯文本 def translation(word): result = requests.post( url="http://fy.iciba.com/ajax.php?a=fy", data={"f": "auto", "t": "auto", "w": word} ).json() return result def main(): # 清空剪切板 clear_clipboard() # 檢測鍵盤按下,沒檢測到按下截圖鍵,繼續等待,檢測到了,代碼往下走。此處有個阻塞 keyboard.wait(hotkey="ctrl+alt+a") # 得到截屏的圖片存放到剪切板 get_image("screen.png") print("開始識別!") # 獲取圖片中的文字 word = get_text_from_image("screen.png") # 翻譯文字 result = translation(word) # pprint(result) # 中文轉英文 print(result["content"]["out"]) # 英文轉中文 # print(result["content"]["word_mean"]) if __name__ == '__main__': main()
aip_baidu_img2text_recognition.py

#!/usr/bin/env python # _*_ coding: UTF-8 _*_ """================================================= @Project -> File : six-dialog_design -> aip_baidu_img2text_recognition.py @IDE : PyCharm @Author : zihan @Date : 2020/5/26 18:44 @Desc :借用api:https://blog.csdn.net/qq_33333654/article/details/102723118 文字識別接口說明:https://ai.baidu.com/ai-doc/OCR/Dk3h7yf8m =================================================""" from aip import AipOcr """你的 APPID AK SK""" APP_ID = "17593750" API_KEY = "VExogNuAiDslahMNe2uRn5IB" SECRET_KEY = "zILi6zsRwgKa1dTmbv2Rw8uG1oPGyI9A" client = AipOcr(APP_ID, API_KEY, SECRET_KEY) def get_text_from_image(image_path): if isinstance(image_path, bytes): image = image_path else: with open(image_path, "rb") as f: image = f.read() result_data = client.basicAccurate(image) # print(result_data) result_str = "" if result_data["words_result"]: for data in result_data["words_result"]: result_str += data['words'] else: result_str = "No content" return result_str
成功,目前只試過截取單詞或者中文詞組,沒有試過句子,哈哈哈。
至於為什么用post,看圖,在哪兒看就不多說了,自己嘗試翻譯一個單詞就知道了。
post哪些數據來源, 繼續看圖
可以看出,當前需要翻譯的數據是"你好"。