使用Python制作一個翻譯器
一、用Python做一個翻譯器
之前有分享過gradio制作web App,我們今天就基于此做一個翻譯器。文末有試用訪問哦,歡迎點(diǎn)擊。
1.產(chǎn)品說明
實(shí)現(xiàn)一個中英翻譯器,輸入中文或者英文,輸出對應(yīng)的英文或者中文,目的是給學(xué)習(xí)英文的用戶,提供單詞解釋服務(wù)。使用方式為手機(jī)端為主,PC也可以支持。
初步界面設(shè)計(jì)如下:
2.gradio前端布局
import numpy as np import gradio as gr import os from fastapi import FastAPI import requests import json import jieba with gr.Blocks(title="aiweker") as wekerapp: gr.Markdown("## 微客翻譯") with gr.Row(): translate_output = gr.Textbox( label="結(jié)果在這里", lines=10 ) with gr.Row(): translate_txt = gr.Textbox(show_label=False, placeholder="輸入你要的單詞,中文或者英文").style(container=False) with gr.Row(): with gr.Column(scale=1): translate_button = gr.Button("提交")
gradio提供的產(chǎn)品說明設(shè)計(jì)中的組件,包括文本框(Textbox)和 按鈕(Button)。由于優(yōu)先支持手機(jī)端顯式,布局上一行布局為主,一行一個組件。
3.翻譯器實(shí)現(xiàn)
如何實(shí)現(xiàn)翻譯功能,可以訪問百度翻譯功能,間接實(shí)現(xiàn)翻譯功能。通過分析可以通過https://fanyi.baidu.com/sug可以實(shí)現(xiàn)翻譯功能。接口返回多個key-value鍵值對
def translate(input_text): url = "https://fanyi.baidu.com/sug" headers = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64)"} data = {"kw": input_text} rsp = requests.post(url=url, headers=headers, data=data) data = json.loads(rsp.content.decode()) return data ???????# {'errno': 0, 'data': [{'k': '清華大學(xué)', 'v': '名. Tsinghua University'}]}
4.gradio功能調(diào)用
為了說明每一個單詞的解釋,我們接入中文分詞jieba進(jìn)行分詞。
def translate_process(input_text): result = [] if len(input_text)< 3: seg_list = [input_text] else: seg_list = jieba.cut(input_text, cut_all=False) for text in seg_list: data = translate(text) for ds in data.get('data', []): result.append("{}: {}".format(ds.get('k'),ds.get('v'))) break return "\n".join(result) ???????translate_button.click(translate_process, inputs=translate_txt, outputs=translate_output)
click將實(shí)現(xiàn)按鈕的點(diǎn)擊事件,輸入前端中的text,輸出結(jié)果也是text組件,處理過程為translate_process,每個分詞的解釋。
執(zhí)行python文件就可以部署了。
python -u app.py
5.總結(jié)和下一步
這里分享一個簡單的app應(yīng)用開發(fā),從產(chǎn)品設(shè)計(jì)、代碼開發(fā)到部署。當(dāng)然這只是一個簡單的demo,再做產(chǎn)品時出來實(shí)現(xiàn)功能外,還要考慮市場因素,你可以實(shí)現(xiàn)一個功能,但是市場已經(jīng)有類似的產(chǎn)品,你的產(chǎn)品有什么獨(dú)特性,有沒有解決別人沒有解決的問題。
下一步計(jì)劃:
- 部署上的優(yōu)化,多進(jìn)程部署
- 增加輸入圖片翻譯功能,可以通過手機(jī)拍攝,返回翻譯結(jié)果
二、用Python做一個翻譯器進(jìn)階篇
1. 多進(jìn)程部署
我們知道,python的多線程實(shí)現(xiàn)其實(shí)不能很好的發(fā)揮多CPU的計(jì)算能力,如果有多核CPU的話建議采用多進(jìn)程部署。對于python程序可以有很多種方式來多進(jìn)程部署,如multiprocessing,Ray,Mars等。而對于web app部署用的gunicore+uvicore,負(fù)載均衡還會加上nginx。
Gunicorn (Green Unicorn)是一個基于Python的WSGI(Web Server Gateway Interface) HTTP服務(wù)器,它是一個開源的工具,在大量的Python Web應(yīng)用中被廣泛使用,例如 Django、Flask等。在Gunicorn中,使用worker來處理客戶端的請求,可以根據(jù)配置啟動多個worker用來處理請求,同時也支持在同一端口上使用多個worker。
Gunicorn可以使用多個進(jìn)程在多個CPU上同時運(yùn)行,提高Web應(yīng)用的并發(fā)能力。它具有以下特點(diǎn):
1.高可靠性:Gunicorn使用多進(jìn)程方式運(yùn)行,任何一個進(jìn)程出現(xiàn)問題都不會影響整個應(yīng)用的運(yùn)行,進(jìn)程間異常自動重啟。
2.高性能:Gunicorn使用高效的異步I/O機(jī)制,能夠處理高并發(fā)請求。
3.易于部署:Gunicorn可以通過命令行簡單地啟動應(yīng)用程序,也可以與Nginx等Web服務(wù)器配合使用。
4.高安全性:Gunicorn支持SSL/TLS加密傳輸,可對數(shù)據(jù)進(jìn)行加密保護(hù),保障數(shù)據(jù)的安全性。
與之相比,Uvicorn 是一個基于 ASGI(Asynchronous Server Gateway Interface) 的 Web 服務(wù)器,它也是用 Python 編寫的,主要的特點(diǎn)是支持異步請求和響應(yīng)。Uvicorn 在處理高負(fù)載的 Web 應(yīng)用程序時表現(xiàn)出色,因?yàn)樗軌蚶?Python 異步編程模型來處理大量并發(fā)請求,在響應(yīng)速度和處理效率上都比 Gunicorn 要快。
通常的組合是Gunicorn+uvicore, 或者Gunicorn+greenlet(異步)
針對翻譯這個小app部署,gradio提供了將app嵌入到FastAPI中,而FastAPI可用gunicore+uvicore部署,具體如下:
# 文件名為translate.py from fastapi import FastAPI import gradio as gr app = FastAPI() with gr.Blocks() as demo: pass app = gr.mount_gradio_app(app, demo, path="/translate") # gunicorn translate:app -w 4 -k uvicorn.workers.UvicornWorker
上面的例子為啟動4個進(jìn)程,接受外部請求。
2. 添加圖片識別功能
為了增加翻譯功能的使用場景,增加了一個上傳或者拍照識別的功能,以區(qū)別其他的產(chǎn)品。
實(shí)現(xiàn)這個功能需要:
- 增加一個上傳圖片的前端界面
- 圖片ocr識別功能
同樣的,上傳圖片的前端界面采用gradio來編寫,如下:
with gr.Blocks(title="aiweker") as wekerapp: gr.Markdown("## 微客翻譯") with gr.Row(): translate_output = gr.Textbox( label="結(jié)果在這里", lines=10 ) with gr.Row(): translate_txt = gr.Textbox(show_label=False, placeholder="輸入你要的單詞,文或者英文").style(container=False) with gr.Row(): with gr.Column(scale=1): translate_button = gr.Button("提交") with gr.Row(): with gr.Accordion("點(diǎn)這里提交圖片翻譯", open=False): translate_image_input = gr.Image() translate_image = gr.Button("提交圖片") translate_button.click(translate_process, inputs=translate_txt, outputs=translate_output) translate_image.click(ocr_process, inputs=translate_image_input, outputs=translate_output)
其中:
translate_image是圖片提交按鈕,click事件的輸入為圖片,輸出為翻譯后的文本(即對應(yīng)ocr_process輸入?yún)?shù)和輸出參數(shù))
而OCR圖片識別,采用開源OCR paddleocr。安裝和使用參見:
https://github.com/PaddlePaddle/PaddleOCR
需要注意的為了提供識別性能,上傳的圖片需要resize到一個比較小的尺寸如320。
到此這篇關(guān)于使用Python制作一個翻譯器的文章就介紹到這了,更多相關(guān)Python翻譯器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
舉例講解Python程序與系統(tǒng)shell交互的方式
這篇文章主要介紹了Python程序與系統(tǒng)shell交互的方式,舉了一個非常簡單的hello world的例子,需要的朋友可以參考下2015-04-04Django+python服務(wù)器部署與環(huán)境部署教程詳解
這篇文章主要介紹了Django+python服務(wù)器部署與環(huán)境部署教程,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-03-03基于tf.shape(tensor)和tensor.shape()的區(qū)別說明
這篇文章主要介紹了基于tf.shape(tensor)和tensor.shape()的區(qū)別說明,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-06-06Python實(shí)現(xiàn)從概率分布中隨機(jī)采樣
這篇文章主要介紹了通過幾個機(jī)器學(xué)習(xí)中最常用的概率分布為例,來看看如何從一個概率分布中采樣,文章中的代碼對我們的工作或?qū)W習(xí)具有一定價(jià)值,感興趣的朋友可以了解一下2021-12-12python 實(shí)現(xiàn)提取log文件中的關(guān)鍵句子,并進(jìn)行統(tǒng)計(jì)分析
今天小編就為大家分享一篇python 實(shí)現(xiàn)提取log文件中的關(guān)鍵句子,并進(jìn)行統(tǒng)計(jì)分析,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-12-12python pip安裝包出現(xiàn):Failed building wheel for xxx錯誤的解決
今天小編就為大家分享一篇python pip安裝包出現(xiàn):Failed building wheel for xxx錯誤的解決,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-12-12python實(shí)現(xiàn)各進(jìn)制轉(zhuǎn)換的總結(jié)大全
這篇文章主要給大家總結(jié)了python實(shí)現(xiàn)各進(jìn)制轉(zhuǎn)換的相關(guān)資料,其中包括字符串與十六進(jìn)制轉(zhuǎn)換、內(nèi)置函數(shù)hex()與進(jìn)制互轉(zhuǎn)等相關(guān)內(nèi)容,需要的朋友可以參考借鑒,下面來一起看看吧。2017-06-06淺談keras中的后端backend及其相關(guān)函數(shù)(K.prod,K.cast)
這篇文章主要介紹了淺談keras中的后端backend及其相關(guān)函數(shù)(K.prod,K.cast),具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-06-06python生成詞云的實(shí)現(xiàn)方法(推薦)
下面小編就為大家?guī)硪黄猵ython生成詞云的實(shí)現(xiàn)方法(推薦)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-06-06