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

图像识别系统 - Ubuntu部署指南(香橙派开发板测试)-学习记录1

图像识别系统 - Ubuntu部署指南-学习记录1

本文档提供在Ubuntu系统上部署图像识别系统的详细步骤。

系统要求

  • Ubuntu 18.04 LTS 或更高版本
  • Python 3.6+
  • 至少2GB内存
  • 至少1GB可用磁盘空间

部署步骤

1. 安装系统依赖

# 更新系统包
sudo apt update
sudo apt upgrade -y# 安装Python及相关工具
sudo apt install -y python3 python3-pip python3-dev
sudo apt install -y python3-venv
sudo apt install -y build-essential libssl-dev libffi-dev# 安装OpenCV依赖
sudo apt install -y libsm6 libxext6 libxrender-dev libgl1-mesa-glx

2. 创建项目目录

# 创建项目目录
mkdir -p ~/pd_recognition_system
cd ~/pd_recognition_system

3. 设置Python虚拟环境

# 创建虚拟环境
python3 -m venv svm_venv# 激活虚拟环境
source svm_venv/bin/activate

4. 获取项目代码

方法一:克隆Git仓库(如果使用Git)

git clone <项目Git仓库URL> .

方法二:手动上传项目文件

使用SCP或SFTP等工具将项目文件上传到Ubuntu服务器的~/pd_recognition_system目录下。确保上传以下内容:

  • svm_fastapi.py
  • requirements.txt
  • svm_pd_model/ 目录及其中的所有文件
  • test_dataset/ 目录(可选,仅用于测试)

5. 安装项目依赖

# 确保虚拟环境已激活
pip install --upgrade pip
pip install -r requirements.txt

6. 测试服务

# 运行服务
python svm_fastapi.py

访问 http://<服务器IP>:9000/docs 检查API文档界面是否正常加载。

7. 配置系统服务(使服务在后台运行)

创建systemd服务文件:

sudo nano /etc/systemd/system/pd-recognition.service

添加以下内容:

[Unit]
Description=PD Recognition System API Service
After=network.target[Service]
User=<你的用户名>
Group=<你的用户组>
WorkingDirectory=/home/<你的用户名>/pd_recognition_system
Environment="PATH=/home/<你的用户名>/pd_recognition_system/svm_venv/bin"
ExecStart=/home/<你的用户名>/pd_recognition_system/svm_venv/bin/python svm_fastapi.py[Install]
WantedBy=multi-user.target

注意:替换 <你的用户名><你的用户组> 为实际值。可以通过 whoamigroups 命令获取。

实测例子-以香橙派开发版安装ubuntu系统的系统服务配置如下(已测试成功):
我是root(管理员)运行方式。
添加内容如下:


[Unit]
Description=PD Recognition System API Service
After=network.target[Service]
User=root
Group=root
WorkingDirectory=/root/pd_recognition_system
Environment="PATH=/root/pd_recognition_system/svm_venv/bin"
ExecStart=/root/pd_recognition_system/svm_venv/bin/python svm_fastapi.py[Install]
WantedBy=multi-user.target

启用和运行服务:

sudo systemctl daemon-reload
sudo systemctl enable pd-recognition.service
sudo systemctl start pd-recognition.service

检查服务状态:

sudo systemctl status pd-recognition.service

8. 配置防火墙(如需对外提供服务)

# 允许9000端口通过防火墙
sudo ufw allow 9000/tcp
sudo ufw status

API测试

使用curl测试API

curl -X POST -F "file=@./test_dataset/corona/corona111.png" http://localhost:9000/api/v1/predict

使用Python脚本测试

创建测试脚本 test_api.py

import requestsurl = 'http://localhost:9000/api/v1/predict'
file_path = './test_dataset/surface/surface57.png'  # 替换为实际图像路径
files = {'file': open(file_path, 'rb')}response = requests.post(url, files=files)
print(response.json())

运行测试:

python test_api.py

系统维护

查看日志

sudo journalctl -u pd-recognition.service

重启服务

sudo systemctl restart pd-recognition.service

停止服务

sudo systemctl stop pd-recognition.service

可能遇到的问题及解决方案

1. 依赖安装失败

问题:安装某些Python依赖包时出错。

解决方案:

# 安装Python开发包
sudo apt install -y python3-dev# 安装编译工具
sudo apt install -y build-essential

2. OpenCV导入错误

问题:导入OpenCV库时出现错误。

解决方案:

# 安装OpenCV系统依赖
sudo apt install -y libsm6 libxext6 libxrender-dev libgl1-mesa-glx

3. 服务无法访问

问题:无法从外部访问API服务。

解决方案:

  1. 检查防火墙设置
sudo ufw status
sudo ufw allow 9000/tcp
  1. 确保FastAPI服务绑定到0.0.0.0而不是127.0.0.1
  2. 检查云服务提供商的安全组/网络ACL设置

4. 内存不足

问题:服务运行一段时间后崩溃,日志显示内存不足。

解决方案:

  1. 增加虚拟机内存
  2. 配置swap空间
sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

性能优化建议

  1. 考虑使用Gunicorn作为WSGI服务器与Uvicorn配合使用,提高并发处理能力
pip install gunicorn
gunicorn -w 4 -k uvicorn.workers.UvicornWorker app:app
  1. 使用Nginx作为反向代理,提供更好的负载均衡和安全性
sudo apt install -y nginx

配置Nginx:

server {listen 80;server_name your_domain.com;location / {proxy_pass http://127.0.0.1:9000;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;}
}
http://www.xdnf.cn/news/141121.html

相关文章:

  • MySQL 详解之函数:数据处理与计算的利器
  • HOW - 如何模拟实现 gpt 展示答案的交互效果
  • form表单提交前设置请求头request header及文件下载
  • 线程怎么创建?Java 四种方式一网打尽
  • uniapp 仿企微左边公司切换页
  • FreeRTOS
  • 斗鱼娱乐电玩平台源码搭建实录
  • 短视频矩阵系统可视化剪辑功能开发,支持OEM
  • QT 连接数据库操作(15)
  • Pandas 数据导出:如何将 DataFrame 追加到 Excel 的不同工作表
  • 银发科技:AI健康小屋如何破解老龄化困局
  • MYSQL之数据类型
  • 【MySQL】3分钟解决MySQL深度分页问题
  • git 命令集
  • 【Web应用服务器_Tomcat】一、Tomcat基础与核心功能详解
  • 如何配置Spark
  • Spring-Framework源码环境搭建
  • 7.10 GitHub Sentinel CLI开发实战:Python构建企业级监控工具的5大核心技巧
  • JMeter添加HTTP请求默认值元件的作用详解
  • 百度打响第一枪!通用超级智能体时代,真的来了
  • 常用第三方库:flutter_boost混合开发
  • Android Kotlin 依赖注入全解:Koin appModule 配置与多 ViewModel 数据共享实战指南
  • 解决视频处理中的 HEVC 解码错误:Could not find ref with POC xxx【已解决】
  • 创建型设计模式之:简单工厂模式、工厂方法模式、抽象工厂模式、建造者模式和原型模式
  • 【QQMusic项目复习笔记——音乐管理模块详解】第四章
  • 1.10软考系统架构设计师:优秀架构设计师 - 练习题附答案及超详细解析
  • 时序数据库IoTDB在航空航天领域的解决方案
  • BiliNote:开源的AI视频笔记生成工具,让知识提取与分享更高效——跨平台自动生成结构化笔记,实现从视频到Markdown的智能转化
  • PT report_timing详解
  • 关于使用git init --bare 裸仓库的使用