当前位置: 首页 > news >正文

聊城市网站建设_网站建设公司_服务器部署_seo优化

做公司网站主要需要什么科目,个人公众号开发php,国内网站空间 优帮云,中小型企业网站模板基于iOS平台的车牌识别表情识别项目 简介 ​ 该项目客户端搭载于iOS平台#xff0c;服务端搭载于阿里云服务器#xff0c;主要功能是通过拍照或选取相册图片来进行车牌的识别以及人脸表情识别。本文便是对项目整体流程设计思路和具体实现做一个详细介绍。 整体实…基于iOS平台的车牌识别表情识别项目 简介 ​ 该项目客户端搭载于iOS平台服务端搭载于阿里云服务器主要功能是通过拍照或选取相册图片来进行车牌的识别以及人脸表情识别。本文便是对项目整体流程设计思路和具体实现做一个详细介绍。 整体实现流程 ​ 为了阅读下述内容时脑海中有个框架便对项目做一个整体实现流程的描述。 后端 ​ ** 实现功能 **使用训练好的Yolo模型在照片中检测出车牌部分处理图片进行部分截取对处理出的图片进行进一步的模型检测识别出车牌号、车牌颜色等信息然后通过服务器与移动端的网络通信将检测结果返回给移动端。 ​ 后端模型训练和检测这一部分是由同专业的两位大哥tjx大哥、zmx大哥写的具体实现细节这里不过多介绍下面具体介绍也只讲通信部分想知道模型的训练流程和检测流程可以看作者的这两篇文章——《从零开始安装并允许YOLOv5》、《简单使用YOLOv5自己训练模型》相信看完之后也能有个大致概念。 移动端 ​ **实现功能**编写UI界面、添加交互行为、发起网络请求简单来说就是做成一个App用户打开App看到的就是UI界面通过点击、滑动等等操作进行拍照或选取相册图片接着发起网络请求将这个指定图片上传到服务器。 ​ 移动端使用的是Swift进行iOS开发编写控件操作代码及相关布局、照片图库的选取实现、图片的保存设置、以及使用第三方包Alamofire发起网络请求上传图片。 服务器端 ​ **实现功能**作为交通枢纽将移动端发来的图片作为参数传给在服务器端运行的上述后端代码这里表述不够准确后端就是服务器端但为了方便理解将部署到服务器这个过程抽象为服务器端介绍到图片后进行识别程序得到的检测结果返回给移动端。 后端通信具体实现 ​ 使用Python实现通信需要使用网络编程的框架比如Django、Flask。本项目采用的是Flask。 ​ 以下是一个Flask框架的简单示例 # 导入Flask模块 from flask import Flask# 创建Flask应用程序实例 app Flask(__name__)# 定义路由/hello路由是指URL的路径部分 app.route(/hello)# 定义函数hello()该函数将处理路由/hello的请求 def hello():return hello world # 返回字符串hello world# 当直接运行该脚本时执行以下代码 if __name__ __main__:# 运行Flask应用程序监听所有网络接口调试模式开启监听的端口号为6006app.run(0.0.0.0, debugTrue, port6006) 这段代码就实现了一个简单后端所要具有的通信功能客户端只要访问服务器所在ip指定端口的指定路由即上述Hello即可请求到信息默认是get请求关于get请求和post请求的区别需要去学计算机网络的ip协议。 服务器运行后效果 画圈处即为你的对外ip和访问端口6006此时服务器就保持常运行监听端口我们可以简单在浏览器发起一个get请求测试一下效果如下 发现能正常访问。 同理我们再做一个该项目的通信代码这个要考虑的细节就比较多了。 车牌识别后端通信代码1班 # 导入所需模块 import base64 from flask import Flask, request, send_file, jsonify import cv2 import plate_rec from yolo_det import process_image_with_yolov5# 创建Flask应用程序实例 app Flask(__name__)# 定义路由/detect_license_plate处理POST请求 app.route(/detect_license_plate, methods[POST]) def detect_license_plate_route():# 获取上传的文件uploaded_file request.files[file]# 保存上传的文件到服务器uploaded_file.save(uploaded_image.jpg)# 调用车牌检测函数result_image_path detect_license_plate(uploaded_image.jpg)# 将结果图片转换为Base64编码的字符串with open(result_image_path, rb) as imag_file:result_image_data base64.b64encode(imag_file.read())# 使用车牌识别模块识别车牌号custom_string plate_rec.recognize(result_image_path)print(custom_string)# 构建响应数据response {custom_string: custom_string,image_data: result_image_data.decode(utf-8),}# 返回检测结果图片和响应数据return jsonify(response), 200, {Content-Type: application/json; charsetutf-8}# 车牌检测函数 def detect_license_plate(url: str):# 设置模型路径和图片路径onnx_path ../weights/best.onnximage_path url# 使用YOLOv5模型进行车牌检测result_image, crop_image process_image_with_yolov5(onnx_path, image_path)# 保存结果图片和车牌区域图片cv2.imwrite(../result/res.jpg, result_image)cv2.imwrite(../result/crop.jpg, crop_image)# 返回车牌区域图片路径return ../result/crop.jpg# 当直接运行该脚本时执行以下代码 if __name__ __main__:# 运行Flask应用程序监听所有网络接口端口号为5000app.run(host0.0.0.0, port5000) ​ 以上车牌识别通信代码中由于要实现返回图片文件和一个检测出车牌号结果的字符串但我们需要在一次通信过程中实现那么这两个数据就必须捆绑在一起为了客户端拿到返回值的适合能把两个内容区分开这里使用了JSON来进行编码这是一种常用编码形式能通过不同key值剥离开不同类型的数据。 人脸表情识别后端通信代码2班 from flask import Flask, request, send_file import cv2import main # from yolo_det import process_image_with_yolov5#创建实例 app Flask(__name__) # app.config[UPLOAD_FOLDER] shuruapp.route(/detect_license_plate, methods[POST]) def detect_license_plate_route():# 获取上传的文件uploaded_file request.files[file]# 保存上传的文件到服务器uploaded_file.save(../image.jpg)# 调用情绪分析函数result_image_path detect_license_plate(../image.jpg)# 返回检测结果图片return send_file(result_image_path, mimetypeimage/jpeg)def detect_license_plate(url: str):image_path url# check_requirements(exclude(pycocotools, thop))# with torch.no_grad():result_image main.detect(image_path)cv2.imwrite(./output/output.jpg, result_image)return ./output/output.jpgif __name__ __main__:app.run(host0.0.0.0, port5000)服务器部署具体实现 ​ 这里实现的是把项目部署到云服务器上运行摒弃掉了原来在本机上跑服务器程序。 这一块是遇到问题最多的模块先说一下为什么要进行云服务器的部署先上一张图如下 ​ 这也是我和支哥秀姐想了最久的问题之一昨晚背计网面试题的时候灵光一现终于弄清楚是咋回事了。接下来就详细说说。 ​ 学了计网的同学应该就知道私有IP地址也就是私网私网是不能直接访问的如果想要访问需要做一个NAT网络转换器转换到公网进行访问但这就不是代码层面的事了所以无论你是自己手机的热点每台手机的移动网络都是私网、还是校园网亦或者是公司内部网络这都是内网外界无法直接访问所以当时存在一个情况就是必须要连阿支哥的热点才能访问服务器服务器也连着支哥热点这就是因为他们此时在同一个局域网内不存在找ip地址的需求。 ​ 而当你配置了云服务器云服务器提供的ip是公网你可以设置任何人都可以访问那么当我发网络请求的时候通过DNS就能找到对应IP发送请求不会收到阻拦这也是当时车牌识别系统什么网络都能使用的原因。 ### 服务器部署流程1、买一个服务器有免费体验需要身份验证一下我用的就是免费30天的 2、配置信息这里选一个Linux操作系统带宽这些都可以随意设置一下影响不大但是登陆密码用户名这些一定要记住 3、创建一个实例可以看到画圈处就是你的IP地址记得到时用公有IP地址。 4、通过FinalShell本地操控服务器服务器本质也是一台电脑你想要操作它就需要一些远程连接软件用本地的远程连接软件连接到服务器即可在本地操作你的服务器这里推荐使用FinalShell根据下图步骤即可建立连接同理也可以操作你的虚拟机。 5、部署项目 ​ 接下来就是把后端代码运行在服务器就行了但是可以看到在这里我们操作服务器只能用命令行的形式用这种方式把项目上传配置环境运行未免过于麻烦所以我们就需要用一个非常方便的软件——宝塔。 宝塔官网 找到一个linux面板的下载命令在FinalShell运行即可。安装完成如图所示。 根据外网面板地址浏览器直接访问即可如果没法访问不要担心因为我们服务器的网络不可能这么随便全都能随便访问所以我们必须给宝塔所需要的8888端口开一个安全访问权限。如下图 手动添加这两个端口的授权8000是宝塔用的端口5000是后端程序用的端口。 打开之后再次进入输入FinalShell中显示的账号密码即可进入宝塔如下图 现在就可以非常easy的操控你的服务器了 先把我们的项目上传到服务器操作如下 步骤三就是我们上传上来的文件接着就可以配置环境了。 下载python操作如下 下载依赖包 首先先在你的项目里运行以下命令得到一个依赖包文件包含你项目中使用的所有依赖包。 pip freeze requirements.txt添加项目选择你的项目文件以及第一个要启动的程序也就是那个通信的代码文件等待下载依赖包即可这个时间有点长因为Python太方便了所以包实在太多了 配置好后运行项目如下 这里还有一个小问题需要处理就是项目里的路径需要改为服务器本地的绝对路径相对路径会出现报错目前还不知晓原因这一块报错的时候作者直接躺了是秀哥给解决的。 做完这些服务器模块就大工告成啦 移动端具体实现 车牌识别移动端通信部分实现代码1班 func fetchDataFromServer1() {// 定义请求的 URLlet url http://你的ip:5000/detect_license_plate// 将图片转换为 JPEG 格式并存储为二进制数据let imageData self.image.jpegData(compressionQuality: 1.0)// 创建一个 URLRequest 对象设置超时时间、请求方法和 URLvar urlRequest URLRequest(url: try! url.asURL())urlRequest.timeoutInterval 30urlRequest.httpMethod HTTPMethod.post.rawValue// 使用 Alamofire 发送一个带有 multipart form data 的上传请求AF.upload(multipartFormData: { multipartFormData inif let imageData imageData {// 将图片数据作为文件附加到请求中并指定文件名和 MIME 类型multipartFormData.append(imageData, withName: file, fileName: image.jpg, mimeType: image/jpeg)}}, with: urlRequest).validate() // 对服务器的响应进行验证.responseJSON { response in// 处理响应print(response)switch response.result {case .success:if let data response.value{// 解析响应数据为 JSON并提取其中的字符串数据let JSONData JSON(data)let customString \(JSONData[custom_string].stringValue)let imageString \(JSONData[image_data].stringValue)print(customString)// 将 base64 编码的图片数据解码为 Data然后将其转换为 UIImage 对象let imageData Data(base64Encoded: imageString)!let resultImage UIImage(data: imageData)!print(成功)print(resultImage.description)print(customString)// 更新界面和数据将解码后的图片显示到 imageView将字符串数据显示到 ansLabelself.resimage resultImageself.vc.ansText customStringself.vc.ansLabel.text self.vc.ansTextself.vc.lastImage self.resimageself.vc.imageView.image self.vc.lastImageself.vc.modalPresentationStyle .fullScreenself.present(self.vc, animated: true)}case .failure(let error):// 处理错误情况print(Error: \(error))print(response)}} } 面部表情识别移动端通信部分实现代码2班 func fetchDataFromServer() {// 定义请求的 URLlet url http://你的ip:5000/detect_license_plate// 将图片转换为 JPEG 格式并存储为二进制数据let imageData self.image.jpegData(compressionQuality: 1.0)// 使用 Alamofire 发送一个带有 multipart form data 的上传请求AF.upload(multipartFormData: { multipartFormData inif let imageData imageData {// 将图片数据作为文件附加到请求中并指定文件名和 MIME 类型multipartFormData.append(imageData, withName: file, fileName: image.jpg, mimeType: image/jpeg)}}, to: url).validate() // 对服务器的响应进行验证.responseData { response in// 处理响应switch response.result {case .success(let data):if let resultImage UIImage(data: data) {// 在这里使用 resultImage它是从服务器返回的 UIImage// 可以将 resultImage 显示在 UIImageView 中或者进行其他处理print(成功)print(resultImage.description)// 更新界面和数据将 resultImage 显示到 imageViewself.resimage resultImageself.vc.lastImage self.resimageself.vc.imageView.image self.vc.lastImageself.vc.modalPresentationStyle .fullScreen// 设置 block 回调函数self.block {self.flag true}self.vc.block self.blockself.present(self.vc, animated: true)}case .failure(let error):// 处理错误情况print(Error: \(error))print(response)}} } 如有错误欢迎指正。 转载请配上原文引用。
http://www.ihoyoo.com/news/63370.html

相关文章:

  • 百度包头网站建设wordpress考试主题
  • 阿里云1m 宽带做网站服务器个人博客网站模板
  • 免费建英文网站丽水专业做网站
  • 网站防御代理wordpress网站如何搬家
  • 青岛 网站设计做预约的网站
  • 建站平台外贸网店怎么开怎么运营
  • 建正建设集团有限公司网站好玩的电脑网页游戏
  • 电脑版网站建设排版模板素材
  • 河北唐山网站建设wordpress接入微信订阅号
  • 南通网站制作建设wordpress主题打不开
  • 婚礼策划方案谷歌seo外贸推广
  • 搜狗官方网站wordpress列出用户名
  • 公司网站建设什么价格低厦门建站公司哪家好
  • 怎么给公司做简单网站网站收录入口
  • 中国建设银行信用卡积分兑换网站设备租赁业务网站如何做
  • 网站建设公司中东营网站推广排名
  • 0791网站建设wordpress首页是哪个文件
  • 建立大型网站吗河北采购招标网官网
  • 如何建网站挣钱进入百度首页
  • 霍山做网站金华婺城区建设局网站
  • 苏州网站建设求职简历动力网站
  • 网站建设 猴王网络有实力建设标准下载网站
  • 口碑好的秦皇岛网站建设价格百姓网二手车个人
  • 做传销网站违法的吗网站用微信登录 要怎么做
  • 做网站银川网站三大标签
  • 如何通过轻淘客做网站广州安全教育平台账号是多少
  • 搜索网站做淘宝客快速开发平台开源
  • 韶关网站建设公司有名的网站建设公司
  • 做excel的网站沈阳工伤保险做实在哪个网站
  • 网站建设规划论文北京网架公司