草庐IT

MUI调用照片以及裁剪和图库照片上传到服务器【后端部分Flask+MUI】

上进小菜猪 2023-03-28 原文

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"] # print(overword) 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' # 填写你的appid 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**。**

有关MUI调用照片以及裁剪和图库照片上传到服务器【后端部分Flask+MUI】的更多相关文章

  1. ruby - 具有身份验证的私有(private) Ruby Gem 服务器 - 2

    我想安装一个带有一些身份验证的私有(private)Rubygem服务器。我希望能够使用公共(public)Ubuntu服务器托管内部gem。我读到了http://docs.rubygems.org/read/chapter/18.但是那个没有身份验证-如我所见。然后我读到了https://github.com/cwninja/geminabox.但是当我使用基本身份验证(他们在他们的Wiki中有)时,它会提示从我的服务器获取源。所以。如何制作带有身份验证的私有(private)Rubygem服务器?这是不可能的吗?谢谢。编辑:Geminabox问题。我尝试“捆绑”以安装新的gem..

  2. ruby - 什么是填充的 Base64 编码字符串以及如何在 ruby​​ 中生成它们? - 2

    我正在使用的第三方API的文档状态:"[O]urAPIonlyacceptspaddedBase64encodedstrings."什么是“填充的Base64编码字符串”以及如何在Ruby中生成它们。下面的代码是我第一次尝试创建转换为Base64的JSON格式数据。xa=Base64.encode64(a.to_json) 最佳答案 他们说的padding其实就是Base64本身的一部分。它是末尾的“=”和“==”。Base64将3个字节的数据包编码为4个编码字符。所以如果你的输入数据有长度n和n%3=1=>"=="末尾用于填充n%

  3. ruby-on-rails - 启动 Rails 服务器时 ImageMagick 的警告 - 2

    最近,当我启动我的Rails服务器时,我收到了一长串警告。虽然它不影响我的应用程序,但我想知道如何解决这些警告。我的估计是imagemagick以某种方式被调用了两次?当我在警告前后检查我的git日志时。我想知道如何解决这个问题。-bcrypt-ruby(3.1.2)-better_errors(1.0.1)+bcrypt(3.1.7)+bcrypt-ruby(3.1.5)-bcrypt(>=3.1.3)+better_errors(1.1.0)bcrypt和imagemagick有关系吗?/Users/rbchris/.rbenv/versions/2.0.0-p247/lib/ru

  4. ruby-on-rails - s3_direct_upload 在生产服务器中不工作 - 2

    在Rails4.0.2中,我使用s3_direct_upload和aws-sdkgems直接为s3存储桶上传文件。在开发环境中它工作正常,但在生产环境中它会抛出如下错误,ActionView::Template::Error(noimplicitconversionofnilintoString)在View中,create_cv_url,:id=>"s3_uploader",:key=>"cv_uploads/{unique_id}/${filename}",:key_starts_with=>"cv_uploads/",:callback_param=>"cv[direct_uplo

  5. 使用 ACL 调用 upload_file 时出现 Ruby S3 "Access Denied"错误 - 2

    我正在尝试编写一个将文件上传到AWS并公开该文件的Ruby脚本。我做了以下事情:s3=Aws::S3::Resource.new(credentials:Aws::Credentials.new(KEY,SECRET),region:'us-west-2')obj=s3.bucket('stg-db').object('key')obj.upload_file(filename)这似乎工作正常,除了该文件不是公开可用的,而且我无法获得它的公共(public)URL。但是当我登录到S3时,我可以正常查看我的文件。为了使其公开可用,我将最后一行更改为obj.upload_file(file

  6. c# - 如何在 ruby​​ 中调用 C# dll? - 2

    如何在ruby​​中调用C#dll? 最佳答案 我能想到几种可能性:为您的DLL编写(或找人编写)一个COM包装器,如果它还没有,则使用Ruby的WIN32OLE库来调用它;看看RubyCLR,其中一位作者是JohnLam,他继续在Microsoft从事IronRuby方面的工作。(估计不会再维护了,可能不支持.Net2.0以上的版本);正如其他地方已经提到的,看看使用IronRuby,如果这是您的技术选择。有一个主题是here.请注意,最后一篇文章实际上来自JohnLam(看起来像是2009年3月),他似乎很自在地断言RubyCL

  7. ruby-on-rails - 在 Rails 中调试生产服务器 - 2

    您如何在Rails中的实时服务器上进行有效调试,无论是在测试版/生产服务器上?我试过直接在服务器上修改文件,然后重启应用,但是修改好像没有生效,或者需要很长时间(缓存?)我也试过在本地做“脚本/服务器生产”,但是那很慢另一种选择是编码和部署,但效率很低。有人对他们如何有效地做到这一点有任何见解吗? 最佳答案 我会回答你的问题,即使我不同意这种热修补服务器代码的方式:)首先,你真的确定你已经重启了服务器吗?您可以通过跟踪日志文件来检查它。您更改的代码显示的View可能会被缓存。缓存页面位于tmp/cache文件夹下。您可以尝试手动删除

  8. java - 从 JRuby 调用 Java 类的问题 - 2

    我正在尝试使用boilerpipe来自JRuby。我看过guide从JRuby调用Java,并成功地将它与另一个Java包一起使用,但无法弄清楚为什么同样的东西不能用于boilerpipe。我正在尝试基本上从JRuby中执行与此Java等效的操作:URLurl=newURL("http://www.example.com/some-location/index.html");Stringtext=ArticleExtractor.INSTANCE.getText(url);在JRuby中试过这个:require'java'url=java.net.URL.new("http://www

  9. ruby - 调用其他方法的 TDD 方法的正确方法 - 2

    我需要一些关于TDD概念的帮助。假设我有以下代码defexecute(command)casecommandwhen"c"create_new_characterwhen"i"display_inventoryendenddefcreate_new_character#dostufftocreatenewcharacterenddefdisplay_inventory#dostufftodisplayinventoryend现在我不确定要为什么编写单元测试。如果我为execute方法编写单元测试,那不是几乎涵盖了我对create_new_character和display_invent

  10. 【鸿蒙应用开发系列】- 获取系统设备信息以及版本API兼容调用方式 - 2

    在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList​()Obt

随机推荐