用 PHP 与深度学习模型进行物体检测

news/2024/12/2 19:20:56/文章来源:https://www.cnblogs.com/ocr12/p/18582509

物体检测是计算机视觉中的一个重要任务,涉及识别和定位图像中的多个物体。在本篇文章中,我们将探讨如何在 PHP 环境中实现物体检测的简单功能,尽管 PHP 不是深度学习的主流编程语言,我们将通过调用外部 Python 脚本与深度学习框架(如 YOLO)进行集成,实现物体检测。

环境准备
PHP 7.4 或更高版本。
Python 3.x,以及已经训练好的 YOLO 模型。
OpenCV 和其他依赖库:用于处理图像数据。
Darknet 或其他深度学习框架:训练和执行 YOLO 模型。
安装 PHP
首先确保系统中安装了 PHP,可以使用以下命令检查:

bash

php -v
安装 Python 和 OpenCV
由于 PHP 本身不直接支持深度学习,我们可以通过 Python 脚本来加载和运行模型。安装 Python 和 OpenCV:

bash

pip install opencv-python opencv-python-headless numpy
训练 YOLO 模型
在本地或云端使用 YOLO 模型进行训练。假设您已经训练了一个 YOLO 模型,并保存了 .weights 和 .cfg 文件。我们将在 PHP 中调用 Python 脚本加载模型并进行物体检测。

编写代码

  1. 使用 PHP 上传图片
    首先,我们使用 PHP 编写一个简单的文件上传表单,允许用户上传图片进行检测。
$output";} else {echo "文件上传失败。";} } ?>
选择图片上传:
2. 编写 Python 脚本进行物体检测 接下来,我们编写一个 Python 脚本 detect_objects.py 来加载 YOLO 模型,进行物体检测,并返回检测结果。此脚本会接收图像路径作为输入,并输出检测结果。

python

import cv2
import sys
import numpy as np

YOLO 配置文件路径和权重文件路径

cfg_file = "yolov3.cfg"
weights_file = "yolov3.weights"
labels_file = "coco.names"

加载标签

with open(labels_file, 'r') as f:
labels = f.read().strip().split('\n')

加载 YOLO 网络

net = cv2.dnn.readNet(weights_file, cfg_file)
layer_names = net.getLayerNames()
output_layers = [layer_names[i - 1] for i in net.getUnconnectedOutLayers()]

读取输入图像

image_path = sys.argv[1]
image = cv2.imread(image_path)
height, width, channels = image.shape

创建 blob

blob = cv2.dnn.blobFromImage(image, 0.00392, (416, 416), (0, 0, 0), True, crop=False)

进行前向推理

net.setInput(blob)
outs = net.forward(output_layers)

分析结果并画框

class_ids = []
confidences = []
boxes = []
for out in outs:
for detection in out:
scores = detection[5:]
class_id = np.argmax(scores)
confidence = scores[class_id]
if confidence > 0.5:
center_x = int(detection[0] * width)
center_y = int(detection[1] * height)
w = int(detection[2] * width)
h = int(detection[3] * height)
x = center_x - w // 2
y = center_y - h // 2
boxes.append([x, y, w, h])
confidences.append(float(confidence))
class_ids.append(class_id)

使用 NMS 进行去除重复框

indices = cv2.dnn.NMSBoxes(boxes, confidences, 0.5, 0.4)

绘制框并标记物体名称

for i in indices.flatten():
x, y, w, h = boxes[i]
label = str(labels[class_ids[i]])
cv2.rectangle(image, (x, y), (x + w, y + h), (0, 255, 0), 2)
cv2.putText(image, label, (x, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 0, 0), 2)

保存输出结果图像

output_path = "output/" + image_path.split("/")[-1]
cv2.imwrite(output_path, image)

print(f"物体检测结果已保存至: {output_path}")
3. 连接 PHP 和 Python
PHP 通过 shell_exec() 函数来调用 Python 脚本。我们已经在 PHP 代码中调用了 detect_objects.py 脚本,并将上传的图片路径作为参数传递给它。
更多内容访问ttocr.com或联系1436423940
php

$output = shell_exec("python3 detect_objects.py " . escapeshellarg($targetFile));
echo "

$output
";
测试程序
将 YOLO 配置文件、权重文件和类标签文件放置到合适的目录下。
确保 Python 脚本 detect_objects.py 和 PHP 脚本在同一目录。
上传一张图片,通过 PHP 表单提交。
Python 脚本将执行物体检测,并返回检测结果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/845573.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用服务器docker搭建Pwn题目

一、docker的安装 1、安装前先卸载操作系统默认安装的docker sudo apt-get remove docker docker-engine docker.io containerd runc 2、安装必要支持 sudo apt install apt-transport-https ca-certificates curl software-properties-common gnupg lsb-release 3、添加gpg KE…

Windows系统下通过命令行获取进程指标

1.获取当前ProcessID。GetCurrentProcess2.执行cmd或PowerShell cmd:wmic process where "processid=15844" get /format:list PowerShell:Get-Process -id 15844 | Format-List * 作者:快雪 出处:http://www.cnblogs.com/kuaixue/ 本文版权归作者所有,欢迎转…

各层协议

原文链接:点我

技术框架中ORM概念和原理的学习

ORM概念和原理 ORM 概念 我们在介绍 MyBatis 时说到,MyBatis是一种半自动 ORM 实现。那何为 ORM,何为半自动? ORM(Object/Relation Mapping,对象/关系数据库映射)是一种描述对象与关系数据库之间映射的规范。 ORM 作用Java对象和关系数据库如同马和牛,简直是牛头不对马嘴…

在华为开发者空间,基于鲲鹏服务器快速开发打砖块小游戏

本案例将指导开发者如何在鲲鹏服务器部署并运行web小游戏。本文分享自华为云社区《基于鲲鹏服务器的打砖块小游戏部署》,作者: 开发者空间小蜜蜂。 1.1 案例介绍 鲲鹏服务器是基于鲲鹏处理器的新一代数据中心服务器,适用于大数据、分布式存储、高性能计算和数据库等应用。鲲…

5-文件上传漏洞

1、文件上传漏洞原理 1.1 一句话木马 <?php @eval($_POST[xu]); ?> 其中@表示忽略错误,eval()函数表示把传进去的字符串作为php代码执行 从http post里面拿到参数叫xu的value,然后作为代码去执行,并忽略错误 2、Webshell介绍 一句话木马、大马、小马、图片马都是web…

纯血鸿蒙进程加速,混合app开发迎来又一波新机会

对于开发者来说,未来相当一段时间,将来会为鸿蒙,安卓,IOS三个系统同时开发APP上架,其中面对全新的鸿蒙系统,百万APP在未来几年会重新开发上架。 鸿蒙SDK厂商及App开发团队,迎来新的市场机遇。时间不知不觉又来到了2024年最后一个月,又到了辞旧迎新,复盘今年,放眼明年…

实验五 继承和多态

实验一: 代码: publisher.hpp:1 #pragma once2 3 #include<iostream>4 #include<string>5 6 using std::cout;7 using std::endl;8 using std::string;9 10 class Publisher { 11 public: 12 Publisher(const string& s = ""); 13 14 public…

博客园-添加统计图

💖简介 通过WPS在线列表构建博客园每日相关数据统计图。 👉效果📖实现前往WPShttps://www.kdocs.cn/latest新建多维表格 创建表格视图新建仪表盘 新建卡片、折线图卡片配置示例折线图配置示例点击分享获取链接⭐链接配置在config中配置link{icon: <svg t="173313…

华为技术专家出品,《华为开发者空间案例指南》带你玩转云上20+场景应用开发

免费领取云主机,开启你的云上开发之旅,分享体验将有机会赢取精美礼品。 关键词:开发者空间、AI、鲲鹏、Serverless随时随地都能开启开发之旅,这是一种怎样奇妙的体验?想象一下,无需安装繁琐的 IDE,也不用搭建复杂的开发环境,只需开机,就能迅速投入项目开发。在华为开发…

jQuery和CSS3折叠卡片式下拉列表框特效

这是一款使用JQUERY和CSS3制作的效果非常炫酷的折叠卡片式下拉列表框特效。该下拉列表框特效将每一个列表项都制作为卡片的样式,打开和关闭它有打开和关闭百叶窗的感觉,效果非常不错。预览 下载使用方法HTML结构 该下拉列表框特效的列表项使用一个无序列表来制作,用于切换…