MUI调用照片以及裁剪和图库照片上传到服务器【后端部分】
涉及技术:
前端:MUI
后端:Flask
数据库:MongoDB
一.MUI后端接受照片
1.1 主要的py文件
先设置固定接受照片路由,用于处理数据请求。
@app.route("/photo", methods=['POST', 'GET'])
我们在上一篇中写到,前端以及将目的照片将照片的文件流转换为besa64格式的数据流,所以我们在后端里,需要接受它的baes64的数据流文件:
score = request.form.get("imageBase64")
现在的score里面就是我们需要的照片流。我们将其代码模块化,新建一个Photo的py文件。
在主要的py文件里将里面的三个方法引入到我们需要的PHOTO文件里面:
from Photo import imgshibie, wordshibie,translate
1.2 在子模块Photo中调用API
我们首先引入需要的py模块包,如下:
import requests
import base64
import http.client
import hashlib
import urllib
import random
import json
1.2.1 调用通用文字识别(高精度版)某度
百度通用翻译API,不包含词典、tts语音合成等资源。
coding=utf-8
调用调用通用文字识别的目的URL
request_url = "https://aip.baidubce.com/rest/2.0/ocr/v1/accurate_basic"
二进制方式打开图片文件
img=imgByteArr
access_tokenx = "XXXXXX"
params = {"image": img}
access_tokenx为个人的token,需要个人申请。
params存放着我们的目标二进制方式图片文件。
调用其API
request_url = request_url + "?access_token=" + access_tokenx
headers = {'content-type': 'application/x-www-form-urlencoded'}
response = requests.post(request_url, data=params, headers=headers)
如果识别成功:
qwes=response.json()['words_result']
overword=""
for word in qwes:
overword =overword+word["words"]
return overword
调用某度的API之后,返回本次文字识别的结果,返回给主要的py里,后面会响应给前端。
通用物体和场景识别:
目的的API为
request_url = "https://aip.baidubce.com/rest/2.0/image-classify/v2/advanced_general"
1.2.2 中文和英文相互翻译API调用
百度appid和密钥需要通过注册百度【翻译开放平台】账号后获得。
appid = 'XXXX'
secretKey = 'XXXX'
这里有一个需求,因为我需要上传一个图片,然后进行一个文字提取:有俩种情况
- 如果是中文:翻译为英文返回到前端
- 如果是英文:翻译为中文返回到前端
通用翻译API HTTP地址如下:
httpClient = None
myurl = '/api/trans/vip/translate'
写一个检验是否含有中文字符的字函数:
def is_contains_chinese(strs):
for _char in strs:
if '\u4e00' <= _char <= '\u9fa5':
return True
return False
如果这个函数里面,传入的值含有中文字符的值,返回True,否则返回Faalse。
实现,如果是中文:翻译为英文返回到前端,如果是英文:翻译为中文返回到前端
if is_contains_chinese(translate):
fromLang = 'auto'
toLang = 'en'
else:
fromLang = 'auto'
toLang = 'zh'
手动录入翻译内容,q存放
q = translate
sign = appid + q + str(salt) + secretKey
sign = hashlib.md5(sign.encode()).hexdigest()
myurl = myurl + '?appid=' + appid + '&q=' + urllib.parse.quote(q) + '&from=' + fromLang + \
'&to=' + toLang + '&salt=' + str(salt) + '&sign=' + sign
建立会话,返回结果。
response是HTTPResponse对象
httpClient = http.client.HTTPConnection('api.fanyi.baidu.com')
httpClient.request('GET', myurl)
response = httpClient.getresponse()
result_all = response.read().decode("utf-8")
result = json.loads(result_all)
返回值结果如下:
二 . MUI和Flask的特点
MUI的特点:
极小:100k的js文件,60k的css文件。原生编写,不依赖任何三方框架 极强:xcode和Android studio里所有原生控件都具备 高性能:精练的代码、适时的5+原生动画调用,达到原生应用的体验 多端发布:编写一套代码,iOS、Android、浏览器、微信H5、百度直达号、流应用全覆盖
Flask的特点:
良好的文档、丰富的插件、包含开发服务器和调试器(debugger)、集成支持单元测试、RESTful请求调度、支持安全cookies、基于Unicode**。**
|