无人机巡查、农田监测 深度学习yolov8训练无人机罂粟检测数据集无人机禁毒技术 如何构建 yolo8+streamlit 基于YOLOv8的罂粟毒品植株识别系统

发布时间:2026/5/20 1:09:19

无人机巡查、农田监测 深度学习yolov8训练无人机罂粟检测数据集无人机禁毒技术 如何构建 yolo8+streamlit 基于YOLOv8的罂粟毒品植株识别系统 无人机巡查、农田监测 深度学习yolov8训练无人机罂粟检测数据集 如何构建 yolo8streamlit 基于YOLOv8的罂粟毒品植株识别系统文章目录YOLOv8 罂粟植株检测系统部署代码示例仅供参考学习使用。一、环境搭建1. 安装CUDA驱动2. 安装Anaconda3. 创建Python虚拟环境二、项目依赖安装三、数据集准备四、创建data.yaml文件五、模型训练1. 下载YOLOv8预训练模型2. 开始训练六、模型验证七、模型导出八、Streamlit应用开发九、运行应用十、系统优化建议选择观看1. 环境准备2. 数据集准备3. 训练模型4. 部署模型4.1 创建Streamlit应用4.2 运行Streamlit应用以下文字及代码仅供参考学习使用。基于深度学习YOLOv8的罂粟毒品植株识别系统数据集的一些情况。罂粟数据集。标注为yolo目标检测数据集txt标签可用再yolo5 yolo7 yolo8 yolo9 yolo10等目标检测模型。数据集已划分好训练集1088张图片验证集201张图片图片均为无人机俯拍视角均为现实场景下实拍原图不含任何数据增强的图片。yolo8实测map为83.9%。基于YOLOv8的罂粟毒品植株识别系统技术栈:yolo8streamlit项目应用可以将模型部署到实际应用中如无人机巡查、农田监测等场景。实时监测并识别罂粟植株防止非法种植。项目预实现目标功能1.可以识别图片与视频也支持本地摄像头识别。其中图片识别支持统计检测到的物体数量并以表格形式返回到前端页面显示表格支持搜索、查询、excel导出2.可以通过UI界面动态调节模型置信度与IOU系统可以根据电脑配置的运行环境自动选择模型进行加速推理若运行环境为GPU,选择pt模型推理若为CPU运行环境选择onnx模型加速推理基于YOLOv8构建一个罂粟毒品植株识别系统并将其部署到实际应用中我们可按照以下步骤进行YOLOv8 罂粟植株检测系统部署代码示例仅供参考学习使用。一、环境搭建1. 安装CUDA驱动首先确认你的GPU型号然后从NVIDIA官网下载并安装对应的CUDA驱动。验证安装nvidia-smi2. 安装Anaconda从官网下载Anaconda安装包并安装bashAnaconda3-2023.07-Linux-x86_64.sh3. 创建Python虚拟环境conda create-nyolo_envpython3.9conda activate yolo_env无人机禁毒技术二、项目依赖安装pipinstalltorch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu118 pipinstallultralytics opencv-python matplotlib streamlit pandas openpyxl三、数据集准备假设同学你的数据集结构如下poppy_dataset/ ├── images/ │ ├── train/ │ └── val/ └── labels/ ├── train/ └── val/四、创建data.yaml文件在项目根目录下创建data.yaml文件train:./poppy_dataset/images/trainval:./poppy_dataset/images/valnc:1# 类别数量names:[poppy]# 类别名称五、模型训练1. 下载YOLOv8预训练模型curl-Ohttps://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8n.pt2. 开始训练创建train.py文件fromultralyticsimportYOLO# 加载预训练模型modelYOLO(yolov8n.pt)# 开始训练resultsmodel.train(datadata.yaml,epochs100,imgsz640,batch16,namepoppy_detection,projectpoppy_project)运行训练python train.py六、模型验证# 验证最佳模型metricsmodel.val()print(fmAP:{metrics.box.map:.4f})print(fmAP50:{metrics.box.map50:.4f})七、模型导出# 导出ONNX格式model.export(formatonnx)这将在runs/detect/poppy_detection/weights目录下生成best.onnx文件。八、Streamlit应用开发创建app.py文件importstreamlitasstfromultralyticsimportYOLOimportcv2importnumpyasnpimportpandasaspdst.cache_resourcedefload_model():# 根据设备自动选择模型ifcudainst.session_state.get(device,)andtorch.cuda.is_available():returnYOLO(poppy_project/poppy_detection/weights/best.pt)else:returnYOLO(poppy_project/poppy_detection/weights/best.onnx,devicecpu)modelload_model()defdetect_objects(image,conf_threshold,iou_threshold):resultsmodel(image,confconf_threshold,iouiou_threshold)returnresults[0].boxes.xyxy.cpu().numpy(),results[0].boxes.conf.cpu().numpy()defmain():st.set_page_config(page_title罂粟植株识别系统,layoutwide)st.title(基于YOLOv8的罂粟毒品植株识别系统)# 设备检测ifdevicenotinst.session_state:st.session_state.devicecudaiftorch.cuda.is_available()elsecpudevice_col,_st.columns([1,3])withdevice_col:st.selectbox(运行设备,options[auto,cpu,cuda],index0,keydevice_select)conf_thresholdst.slider(置信度阈值,min_value0.0,max_value1.0,value0.5,step0.01)iou_thresholdst.slider(IOU阈值,min_value0.0,max_value1.0,value0.5,step0.01)detection_typest.radio(检测模式,(图片检测,视频检测,实时摄像头))ifdetection_type图片检测:uploaded_filest.file_uploader(上传图片,type[jpg,jpeg,png])ifuploaded_fileisnotNone:file_bytesnp.asarray(bytearray(uploaded_file.read()),dtypenp.uint8)imagecv2.imdecode(file_bytes,1)boxes,confsdetect_objects(image,conf_threshold,iou_threshold)detected_count0forbox,confinzip(boxes,confs):ifconfconf_threshold:x1,y1,x2,y2map(int,box)cv2.rectangle(image,(x1,y1),(x2,y2),(0,255,0),2)cv2.putText(image,fPoppy{conf:.2f},(x1,y1-10),cv2.FONT_HERSHEY_SIMPLEX,0.9,(0,255,0),2)detected_count1col1,col2st.columns(2)withcol1:st.image(image,channelsBGR,use_column_widthTrue)withcol2:st.subheader(检测结果)st.write(f检测到罂粟植株数量:{detected_count})# 显示详细检测信息dfpd.DataFrame({对象:[f罂粟 #{i1}foriinrange(detected_count)],置信度:[f{c:.2%}forcinconfs[:detected_count]]})st.dataframe(df)# 导出功能ifdetected_count0:csvdf.to_csv(indexFalse).encode(utf-8)st.download_button(导出为CSV,datacsv,file_namedetection_results.csv,mimetext/csv)elifdetection_type视频检测:uploaded_videost.file_uploader(上传视频,type[mp4])ifuploaded_videoisnotNone:tfiletempfile.NamedTemporaryFile(deleteFalse)tfile.write(uploaded_video.read())capcv2.VideoCapture(tfile.name)stframest.empty()whilecap.isOpened():ret,framecap.read()ifnotret:break# 调整帧大小以加快处理速度framecv2.resize(frame,(640,480))boxes,confsdetect_objects(frame,conf_threshold,iou_threshold)forbox,confinzip(boxes,confs):ifconfconf_threshold:x1,y1,x2,y2map(int,box)cv2.rectangle(frame,(x1,y1),(x2,y2),(0,255,0),2)cv2.putText(frame,fPoppy{conf:.2f},(x1,y1-10),cv2.FONT_HERSHEY_SIMPLEX,0.9,(0,255,0),2)stframe.image(frame,channelsBGR)cap.release()elifdetection_type实时摄像头:runst.checkbox(启动摄像头)FRAME_WINDOWst.image([])capcv2.VideoCapture(0)whilerun:ret,framecap.read()ifnotret:continue# 调整帧大小以加快处理速度framecv2.resize(frame,(640,480))boxes,confsdetect_objects(frame,conf_threshold,iou_threshold)forbox,confinzip(boxes,confs):ifconfconf_threshold:x1,y1,x2,y2map(int,box)cv2.rectangle(frame,(x1,y1),(x2,y2),(0,255,0),2)cv2.putText(frame,fPoppy{conf:.2f},(x1,y1-10),cv2.FONT_HERSHEY_SIMPLEX,0.9,(0,255,0),2)FRAME_WINDOW.image(frame,channelsBGR)cap.release()if__name____main__:main()九、运行应用streamlit run app.py十、系统优化建议选择观看性能优化:使用TensorRT进行模型加速对输入图像进行适当缩放保持比例的前提下调整到合适尺寸使用FP16精度推理准确率提升:可尝试使用更大的YOLOv8模型如yolov8m.pt或yolov8l.pt增加训练轮数并调整学习率调度在训练时添加更多数据增强策略部署优化:使用Docker容器化部署使用Flask/Gunicorn/Nginx构建生产级API服务在边缘设备上部署时可考虑使用ONNX Runtime1. 环境准备首先确保你的开发环境已经安装了必要的库和工具。这里主要需要的是ultralyticsYOLOv8的官方库和streamlit。pipinstallultralytics streamlit2. 数据集准备数据集已划分好了训练集和验证集。假设同学数据集目录结构如下dataset/ ├── images/ │ ├── train/ │ └── val/ └── labels/ ├── train/ └── val/3. 训练模型使用YOLOv8进行模型训练非常简单只需要几行代码即可完成。fromultralyticsimportYOLO# 加载预训练模型modelYOLO(yolov8n.pt)# 开始训练resultsmodel.train(datapath/to/your/data.yaml,epochs50,imgsz640)其中data.yaml文件定义了数据集的相关信息例如train:path/to/your/dataset/images/trainval:path/to/your/dataset/images/valnc:1# 类别数量names:[poppy]# 类别名称4. 部署模型接下来使用Streamlit创建一个简单的Web界面来展示模型的检测结果。4.1 创建Streamlit应用在项目根目录下创建一个名为app.py的文件并编写以下代码importstreamlitasstfromultralyticsimportYOLOimportcv2importnumpyasnpimportpandasaspd# 加载训练好的模型modelYOLO(path/to/your/best.pt)defdetect_objects(image):resultsmodel(image)returnresults[0].boxes.xyxy.cpu().numpy(),results[0].boxes.conf.cpu().numpy()defmain():st.title(基于YOLOv8的罂粟毒品植株识别系统)confidence_thresholdst.slider(调整置信度,min_value0.0,max_value1.0,value0.5,step0.01)iou_thresholdst.slider(调整IOU,min_value0.0,max_value1.0,value0.5,step0.01)detection_typest.radio(检测类型,(图片检测,视频检测,本地摄像头检测))ifdetection_type图片检测:uploaded_filest.file_uploader(上传图片,type[jpg,jpeg,png])ifuploaded_fileisnotNone:imagecv2.imdecode(np.frombuffer(uploaded_file.read(),np.uint8),1)boxes,confsdetect_objects(image)forbox,confinzip(boxes,confs):ifconfconfidence_threshold:x1,y1,x2,y2map(int,box)cv2.rectangle(image,(x1,y1),(x2,y2),(0,255,0),2)cv2.putText(image,fpoppy{conf:.2f},(x1,y1-10),cv2.FONT_HERSHEY_SIMPLEX,0.9,(0,255,0),2)st.image(image,channelsBGR)elifdetection_type视频检测:uploaded_videost.file_uploader(上传视频,type[mp4])ifuploaded_videoisnotNone:video_bytesuploaded_video.read()withopen(temp.mp4,wb)asf:f.write(video_bytes)capcv2.VideoCapture(temp.mp4)whilecap.isOpened():ret,framecap.read()ifnotret:breakboxes,confsdetect_objects(frame)forbox,confinzip(boxes,confs):ifconfconfidence_threshold:x1,y1,x2,y2map(int,box)cv2.rectangle(frame,(x1,y1),(x2,y2),(0,255,0),2)cv2.putText(frame,fpoppy{conf:.2f},(x1,y1-10),cv2.FONT_HERSHEY_SIMPLEX,0.9,(0,255,0),2)st.image(frame,channelsBGR)cap.release()elifdetection_type本地摄像头检测:capcv2.VideoCapture(0)whileTrue:ret,framecap.read()ifnotret:breakboxes,confsdetect_objects(frame)forbox,confinzip(boxes,confs):ifconfconfidence_threshold:x1,y1,x2,y2map(int,box)cv2.rectangle(frame,(x1,y1),(x2,y2),(0,255,0),2)cv2.putText(frame,fpoppy{conf:.2f},(x1,y1-10),cv2.FONT_HERSHEY_SIMPLEX,0.9,(0,255,0),2)st.image(frame,channelsBGR)cap.release()if__name____main__:main()4.2 运行Streamlit应用在终端中运行以下命令启动Streamlit应用streamlit run app.py

相关新闻