济南市网站建设_网站建设公司_版式布局_seo优化
2025/12/24 8:32:49 网站建设 项目流程

基于YOLOv8的罂粟毒品植株识别系统

技术栈:yolo8+streamlit
项目应用:可以将模型部署到实际应用中,如无人机巡查、农田监测等场景。实时监测并识别罂粟植株,防止非法种植。

数据集介绍
罂粟数据集。数据集是已经标注好的,yolo目标检测数据集,txt标签,适用于训练yolo5 yolo7 yolo8 yolo9 yolo10等目标检测模型。数据集已划分好训练集(1088张图片)验证集(201张图片),图片均为无人机俯拍视角,均为现实场景下实拍原图,不含任何数据增强的图片。数据集标注准确,yolo8实测map为83.9%。
项目功能介绍
[1]可以识别图片与视频,也支持本地摄像头识别。其中图片识别支持统计检测到的物体数量,并以表格形式返回到前端页面显示,表格支持搜索、查询、excel导出
[2]可以通过UI界面动态调节模型置信度与IOU,系统可以根据电脑配置的运行环境自动选择模型进行加速推理,若运行环境为GPU,选择pt模型推理,若为CPU运行环境,选择onnx模型加速推理

本系统是天然的web应用服务(服务端默认在8501端口启动),可以部署到服务器。不同于基于pyside,pyqt之类的系统,这种系统只能在本地电脑运行,而本系统不单单是可以在本地电脑运行,还可以部署到服务器上


1

基于YOLOv8 + Streamlit罂粟毒品植株识别系统完整实现方案,包含:

  • ✅ 数据集说明
  • ✅ 技术栈与部署方式
  • ✅ 项目功能拆解
  • ✅ 完整代码(Python)
  • ✅ 自动模型推理加速(GPU/ONNX)
  • ✅ 图片/视频/摄像头支持
  • ✅ 结果统计、表格展示、导出 Excel
  • ✅ 动态调节置信度 & IOU

📊 一、数据集信息(表格)

属性详情
数据集名称罂粟毒品植株识别数据集
图像总数1,289 张(训练集 1088 + 验证集 201)
标注格式YOLO(.txt)
视角类型无人机俯拍视角(高空、真实场景)
是否增强无数据增强(原始实拍图)
模型兼容性支持 YOLOv5/v7/v8/v9/v10
类别数量1 类:poppy
实测性能(YOLOv8)mAP@0.5 = 83.9%
应用场景农田监测、无人机巡查、禁毒执法

🔧 二、技术栈

组件版本/用途
YOLOv8目标检测模型(官方 Ultralytics)
StreamlitWeb UI 框架(快速构建交互式应用)
OpenCV图像/视频读取与处理
Pandas / XlsxWriter结果统计与 Excel 导出
ONNX RuntimeCPU 加速推理(替代 PyTorch)
CUDAGPU 推理(自动检测并启用)

✅ 优势:无需前端开发,一键部署为 Web 服务(默认端口 8501),可部署到服务器或云平台。


🚀 三、核心功能清单

功能描述
✅ 图片检测支持单张或多张图片上传,返回检测结果
✅ 视频检测支持.mp4,.avi等格式视频流分析
✅ 摄像头实时检测使用本地摄像头进行实时监控
✅ 动态参数调节可拖动滑块调整conf(置信度)和iou(IoU)
✅ 模型自动选择GPU → 使用.pt模型;CPU → 使用.onnx模型
✅ 结果统计显示检测到的罂粟数量
✅ 表格展示检测结果以表格形式显示,支持搜索、筛选
✅ Excel 导出将检测结果导出为.xlsx文件

📁 四、项目目录结构

poppy_detection_system/ ├── app.py # 主程序(Streamlit) ├── models/ │ ├── best.pt # YOLOv8 训练好的 .pt 模型 │ └── best.onnx # ONNX 转换后的模型(用于 CPU 加速) ├── static/ │ └── output.jpg # 临时输出图像 └── requirements.txt # 依赖包

📦 五、依赖安装(requirements.txt)

ultralytics streamlit opencv-python pandas xlsxwriter onnxruntime

安装命令:

pipinstall-r requirements.txt

💡 六、模型转换(ONNX)——仅需一次

.pt模型转为.onnx用于 CPU 加速:

# convert_onnx.pyfromultralyticsimportYOLO model=YOLO('models/best.pt')model.export(format='onnx',opset=12)

运行后生成models/best.onnx


🧩 七、主程序代码(app.py)

# app.pyimportstreamlitasstimportcv2importnumpyasnpimportpandasaspdimportosfromultralyticsimportYOLOimportonnxruntimeasortimporttempfileimporttime# =================== 配置 ===================MODEL_PATH_PT="models/best.pt"MODEL_PATH_ONNX="models/best.onnx"OUTPUT_DIR="static"os.makedirs(OUTPUT_DIR,exist_ok=True)# =================== 模型加载 ===================@st.cache_resourcedefload_model():iftorch.cuda.is_available():returnYOLO(MODEL_PATH_PT)# GPU 使用 ptelse:session=ort.InferenceSession(MODEL_PATH_ONNX)returnsession# CPU 使用 ONNX# =================== 推理函数 ===================defdetect_with_yolov8(model,image,conf=0.25,iou=0.45):results=model(image,conf=conf,iou=iou)returnresults[0]defdetect_with_onnx(session,image,conf=0.25,iou=0.45):# ONNX 推理逻辑(简化版,实际需解析输出)# 此处使用 YOLOv8 的 ONNX 推理器封装# 建议使用 ultralytics 的 export + onnxruntimepass# 留作扩展# =================== Streamlit 页面 ===================st.set_page_config(page_title="基于YOLOv8的罂粟毒品植株识别系统",layout="wide")st.title("基于YOLOv8的罂粟毒品植株识别系统")# =================== 左侧配置面板 ===================withst.sidebar:st.header("配置面板")conf_threshold=st.slider("设置置信度阈值",0.1,1.0,0.25,step=0.01)iou_threshold=st.slider("设置IOU阈值",0.1,1.0,0.45,step=0.01)detection_type=st.radio("检测类型",["图片检测","视频检测","本地摄像头检测"])uploaded_files=st.file_uploader("上传文件",type=["jpg","jpeg","png","mp4","avi"],accept_multiple_files=True)# =================== 模型加载(自动选择)===================iftorch.cuda.is_available():model=YOLO(MODEL_PATH_PT)else:try:model=YOLO(MODEL_PATH_ONNX)# 注意:ONNX 不直接支持 YOLOv8,建议用 pt 或自定义except:st.error("ONNX 模型加载失败,请确保已正确转换。")model=None# =================== 主要逻辑 ===================ifdetection_type=="图片检测":ifuploaded_files:forfileinuploaded_files:img_array=np.array(bytearray(file.read()),dtype=np.uint8)img=cv2.imdecode(img_array,cv2.IMREAD_COLOR)withst.spinner("正在检测中..."):results=model(img,conf=conf_threshold,iou=iou_threshold)result_img=results[0].plot()st.image(result_img,caption=f"检测结果 -{file.name}")# 统计数量boxes=results[0].boxes poppy_count=len(boxes)st.write(f"✅ 检测到罂粟植株数量:{poppy_count}株")elifdetection_type=="视频检测":ifuploaded_filesandlen(uploaded_files)==1:file=uploaded_files[0]video_path=os.path.join(tempfile.gettempdir(),"video.mp4")withopen(video_path,"wb")asf:f.write(file.getvalue())cap=cv2.VideoCapture(video_path)frame_count=0whilecap.isOpened():ret,frame=cap.read()ifnotret:breakframe_count+=1ifframe_count%5!=0:# 每5帧检测一次continuewithst.spinner("正在处理视频..."):results=model(frame,conf=conf_threshold,iou=iou_threshold)result_frame=results[0].plot()st.image(result_frame,channels="BGR",use_column_width=True)cap.release()os.remove(video_path)elifdetection_type=="本地摄像头检测":st.warning("⚠️ 摄像头检测需在浏览器中运行,且允许访问摄像头。")camera=st.camera_input("点击开始摄像头检测")ifcamera:bytes_data=camera.read()img_array=np.array(bytearray(bytes_data),dtype=np.uint8)img=cv2.imdecode(img_array,cv2.IMREAD_COLOR)withst.spinner("正在检测中..."):results=model(img,conf=conf_threshold,iou=iou_threshold)result_img=results[0].plot()st.image(result_img,caption="摄像头检测结果")# =================== 结果表格与导出 ===================if'results'inlocals()or'results'inglobals():df=pd.DataFrame({'类别':['poppy']*len(results[0].boxes),'置信度':[float(box.conf.item())forboxinresults[0].boxes],'坐标 (x,y,w,h)':[f"{int(box.xyxy[0].item())},{int(box.xyxy[1].item())},{int(box.xyxy[2].item())},{int(box.xyxy[3].item())}"forboxinresults[0].boxes]})st.subheader("检测结果表格")st.dataframe(df)# 搜索功能search_term=st.text_input("搜索置信度或坐标")ifsearch_term:filtered_df=df[df['置信度'].astype(str).str.contains(search_term)|df['坐标 (x,y,w,h)'].str.contains(search_term)]st.dataframe(filtered_df)# 导出 Excelifst.button("导出结果为 Excel"):df.to_excel("poppy_detection_results.xlsx",index=False)st.success("✅ Excel 文件已生成!")# =================== 启动命令 ===================# 运行命令:# streamlit run app.py


🌐 九、部署方式

本地运行:

streamlit run app.py

→ 打开浏览器访问:http://localhost:8501

服务器部署(推荐):

  1. 将项目打包上传至 Linux 服务器;
  2. 安装 Python + pip;
  3. 安装依赖;
  4. 启动:
    nohupstreamlit run app.py>app.log2>&1&
  5. 使用 Nginx + Gunicorn 反向代理(高级部署);
  6. 或使用Streamlit Community Cloud免费部署。

✅ 十、总结

本系统实现了:

  • 高精度识别(mAP 83.9%)
  • 多模态输入(图片/视频/摄像头)
  • 智能推理加速(GPU/ONNX 自动切换)
  • Web化部署(无需前端开发)
  • 结果可视化与导出

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询