返回顶部
首页 > 资讯 > 后端开发 > Python >用python搭建一个花卉识别系统
  • 935
分享到

用python搭建一个花卉识别系统

python花卉识别python识别系统 2022-06-02 22:06:45 935人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

目录一.开源神经网络(AlexNet)1.获取数据集2.神经网络模型3.训练神经网络4.对模型进行预测二、花卉识别系统搭建(flask)1.构建页面:2.调用神经网络模型3.系统识别结果4.启动系统:三、总结一.开源

目录
  • 一.开源神经网络(AlexNet)
    • 1.获取数据集
    • 2.神经网络模型
    • 3.训练神经网络
    • 4.对模型进行预测
  • 二、花卉识别系统搭建(flask
    • 1.构建页面:
    • 2.调用神经网络模型
    • 3.系统识别结果
    • 4.启动系统:
  • 三、总结

    一.开源神经网络(AlexNet)

    1.获取数据集

    使用步骤如下:
    * (1)在data_set文件夹下创建新文件夹"flower_data"
    * (2)点击链接下载花分类数据集download.Tensorflow.org/example\_im…
    * (3)解压数据集到flower_data文件夹下
    * (4)执行"split_data.py"脚本自动将数据集划分成训练集train和验证集val 

    split_data.py

    
    import os
    from shutil import copy, rmtree
    import random
     
     
    def mk_file(file_path: str):
        if os.path.exists(file_path):
            # 如果文件夹存在,则先删除原文件夹在重新创建
            rmtree(file_path)
        os.makedirs(file_path)
     
     
    def main():
        # 保证随机可复现
        random.seed(0)
     
        # 将数据集中10%的数据划分到验证集中
        split_rate = 0.1
     
        # 指向你解压后的flower_photos文件夹
        cwd = os.getcwd()
        data_root = os.path.join(cwd, "flower_data")
        origin_flower_path = os.path.join(data_root, "flower_photos")
        assert os.path.exists(origin_flower_path)
        flower_class = [cla for cla in os.listdir(origin_flower_path)
                        if os.path.isdir(os.path.join(origin_flower_path, cla))]
     
        # 建立保存训练集的文件夹
        train_root = os.path.join(data_root, "train")
        mk_file(train_root)
        for cla in flower_class:
            # 建立每个类别对应的文件夹
            mk_file(os.path.join(train_root, cla))
     
        # 建立保存验证集的文件夹
        val_root = os.path.join(data_root, "val")
        mk_file(val_root)
        for cla in flower_class:
            # 建立每个类别对应的文件夹
            mk_file(os.path.join(val_root, cla))
     
        for cla in flower_class:
            cla_path = os.path.join(origin_flower_path, cla)
            images = os.listdir(cla_path)
            num = len(images)
            # 随机采样验证集的索引
            eval_index = random.sample(images, k=int(num*split_rate))
            for index, image in enumerate(images):
                if image in eval_index:
                    # 将分配至验证集中的文件复制到相应目录
                    image_path = os.path.join(cla_path, image)
                    new_path = os.path.join(val_root, cla)
                    copy(image_path, new_path)
                else:
                    # 将分配至训练集中的文件复制到相应目录
                    image_path = os.path.join(cla_path, image)
                    new_path = os.path.join(train_root, cla)
                    copy(image_path, new_path)
                print("\r[{}] processing [{}/{}]".fORMat(cla, index+1, num), end="")  # processing bar
            print()
     
        print("processing done!")
     
     
    if __name__ == '__main__':
        main()
    
    

    2.神经网络模型

    model.py

    
    import torch.nn as nn
    import torch
     
    class AlexNet(nn.Module):
        def __init__(self, num_classes=1000, init_weights=False):
            super(AlexNet, self).__init__()
            # 用nn.Sequential()将网络打包成一个模块,精简代码
            self.features = nn.Sequential(   # 卷积层提取图像特征
                nn.Conv2d(3, 48, kernel_size=11, stride=4, padding=2),  # input[3, 224, 224]  output[48, 55, 55]
                nn.ReLU(inplace=True), 									# 直接修改覆盖原值,节省运算内存
                nn.MaxPool2d(kernel_size=3, stride=2),                  # output[48, 27, 27]
                nn.Conv2d(48, 128, kernel_size=5, padding=2),           # output[128, 27, 27]
                nn.ReLU(inplace=True),
                nn.MaxPool2d(kernel_size=3, stride=2),                  # output[128, 13, 13]
                nn.Conv2d(128, 192, kernel_size=3, padding=1),          # output[192, 13, 13]
                nn.ReLU(inplace=True),
                nn.Conv2d(192, 192, kernel_size=3, padding=1),          # output[192, 13, 13]
                nn.ReLU(inplace=True),
                nn.Conv2d(192, 128, kernel_size=3, padding=1),          # output[128, 13, 13]
                nn.ReLU(inplace=True),
                nn.MaxPool2d(kernel_size=3, stride=2),                  # output[128, 6, 6]
            )
            self.classifier = nn.Sequential(   # 全连接层对图像分类
                nn.Dropout(p=0.5),			   # Dropout 随机失活神经元,默认比例为0.5
                nn.Linear(128 * 6 * 6, 2048),
                nn.ReLU(inplace=True),
                nn.Dropout(p=0.5),
                nn.Linear(2048, 2048),
                nn.ReLU(inplace=True),
                nn.Linear(2048, num_classes),
            )
            if init_weights:
                self._initialize_weights()
                
    	# 前向传播过程
        def forward(self, x):
            x = self.features(x)
            x = torch.flatten(x, start_dim=1)	# 展平后再传入全连接层
            x = self.classifier(x)
            return x
            
    	# 网络权重初始化,实际上 PyTorch 在构建网络时会自动初始化权重
        def _initialize_weights(self):
            for m in self.modules():
                if isinstance(m, nn.Conv2d):                            # 若是卷积层
                    nn.init.kaiming_normal_(m.weight, mode='fan_out',   # 用(何)kaiming_normal_法初始化权重
                                            nonlinearity='relu')
                    if m.bias is not None:
                        nn.init.constant_(m.bias, 0)                    # 初始化偏重为0
                elif isinstance(m, nn.Linear):            # 若是全连接层
                    nn.init.normal_(m.weight, 0, 0.01)    # 正态分布初始化
                    nn.init.constant_(m.bias, 0)          # 初始化偏重为0
    
    

    3.训练神经网络

    train.py

    
    # 导入包
    import torch
    import torch.nn as nn
    from torchvision import transforms, datasets, utils
    import matplotlib.pyplot as plt
    import numpy as np
    import torch.optim as optim
    from model import AlexNet
    import os
    import JSON
    import time
     
    # 使用GPU训练
    device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
    with open(os.path.join("train.log"), "a") as log:
        log.write(str(device)+"\n")
     
    #数据预处理
    data_transform = {
        "train": transforms.Compose([transforms.RandomResizedCrop(224),       # 随机裁剪,再缩放成 224×224
                                     transforms.RandomHorizontalFlip(p=0.5),  # 水平方向随机翻转,概率为 0.5, 即一半的概率翻转, 一半的概率不翻转
                                     transforms.ToTensor(),
                                     transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))]),
     
        "val": transforms.Compose([transforms.Resize((224, 224)),  # cannot 224, must (224, 224)
                                   transforms.ToTensor(),
                                   transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))])}
     
    #导入、加载 训练集
    # 导入训练集
    #train_set = torchvision.datasets.CIFAR10(root='./data', 	 # 数据集存放目录
    #										 train=True,		 # 表示是数据集中的训练集
    #                                        download=True,  	 # 第一次运行时为True,下载数据集,下载完成后改为False
    #                                        transform=transform) # 预处理过程
    # 加载训练集                              
    #train_loader = torch.utils.data.DataLoader(train_set, 	  # 导入的训练集
    #										   batch_size=50, # 每批训练的样本数
    #                                          shuffle=False,  # 是否打乱训练集
    #                                          num_workers=0)  # num_workers在windows下设置为0
     
     
    # 获取图像数据集的路径
    data_root = os.path.abspath(os.path.join(os.getcwd(), "../.."))  		# get data root path 返回上上层目录
    image_path = data_root + "/jqsj/data_set/flower_data/"  				 		# flower data_set path
     
    # 导入训练集并进行预处理
    train_dataset = datasets.ImageFolder(root=image_path + "/train",		
                                         transform=data_transform["train"])
    train_num = len(train_dataset)
     
    # 按batch_size分批次加载训练集
    train_loader = torch.utils.data.DataLoader(train_dataset,	# 导入的训练集
                                               batch_size=32, 	# 每批训练的样本数
                                               shuffle=True,	# 是否打乱训练集
                                               num_workers=0)	# 使用线程数,在windows下设置为0
     
    #导入、加载 验证集
    # 导入验证集并进行预处理
    validate_dataset = datasets.ImageFolder(root=image_path + "/val",
                                            transform=data_transform["val"])
    val_num = len(validate_dataset)
     
    # 加载验证集
    validate_loader = torch.utils.data.DataLoader(validate_dataset,	# 导入的验证集
                                                  batch_size=32, 
                                                  shuffle=True,
                                                  num_workers=0)
     
    # 存储 索引:标签 的字典
    # 字典,类别:索引 {'daisy':0, 'dandelion':1, 'roses':2, 'sunflower':3, 'tulips':4}
    flower_list = train_dataset.class_to_idx
    # 将 flower_list 中的 key 和 val 调换位置
    cla_dict = dict((val, key) for key, val in flower_list.items())
     
    # 将 cla_dict 写入 json 文件中
    json_str = json.dumps(cla_dict, indent=4)
    with open('class_indices.json', 'w') as json_file:
        json_file.write(json_str)
     
    #训练过程
    net = AlexNet(num_classes=5, init_weights=True)  	  # 实例化网络(输出类型为5,初始化权重)
    net.to(device)									 	  # 分配网络到指定的设备(GPU/CPU)训练
    loss_function = nn.CrossEntropyLoss()			 	  # 交叉熵损失
    optimizer = optim.Adam(net.parameters(), lr=0.0002)	  # 优化器(训练参数,学习率)
     
    save_path = './AlexNet.pth'
    best_acc = 0.0
     
    for epoch in range(150):
        ########################################## train ###############################################
        net.train()     					# 训练过程中开启 Dropout
        running_loss = 0.0					# 每个 epoch 都会对 running_loss  清零
        time_start = time.perf_counter()	# 对训练一个 epoch 计时
        
        for step, data in enumerate(train_loader, start=0):  # 遍历训练集,step从0开始计算
            images, labels = data   # 获取训练集的图像和标签
            optimizer.zero_grad()	# 清除历史梯度
            
            outputs = net(images.to(device))				 # 正向传播
            loss = loss_function(outputs, labels.to(device)) # 计算损失
            loss.backward()								     # 反向传播
            optimizer.step()								 # 优化器更新参数
            running_loss += loss.item()
            
            # 打印训练进度(使训练过程可视化)
            rate = (step + 1) / len(train_loader)           # 当前进度 = 当前step / 训练一轮epoch所需总step
            a = "*" * int(rate * 50)
            b = "." * int((1 - rate) * 50)
            with open(os.path.join("train.log"), "a") as log:
                  log.write(str("\rtrain loss: {:^3.0f}%[{}->{}]{:.3f}".format(int(rate * 100), a, b, loss))+"\n")
            print("\rtrain loss: {:^3.0f}%[{}->{}]{:.3f}".format(int(rate * 100), a, b, loss), end="")
        print()
        with open(os.path.join("train.log"), "a") as log:
                  log.write(str('%f s' % (time.perf_counter()-time_start))+"\n")
        print('%f s' % (time.perf_counter()-time_start))
     
        ########################################### validate ###########################################
        net.eval()    # 验证过程中关闭 Dropout
        acc = 0.0  
        with torch.no_grad():
            for val_data in validate_loader:
                val_images, val_labels = val_data
                outputs = net(val_images.to(device))
                predict_y = torch.max(outputs, dim=1)[1]  # 以output中值最大位置对应的索引(标签)作为预测输出
                acc += (predict_y == val_labels.to(device)).sum().item()    
            val_accurate = acc / val_num
            
            # 保存准确率最高的那次网络参数
            if val_accurate > best_acc:
                best_acc = val_accurate
                torch.save(net.state_dict(), save_path)
            with open(os.path.join("train.log"), "a") as log:
                  log.write(str('[epoch %d] train_loss: %.3f  test_accuracy: %.3f \n' %
                  (epoch + 1, running_loss / step, val_accurate))+"\n")
            print('[epoch %d] train_loss: %.3f  test_accuracy: %.3f \n' %
                  (epoch + 1, running_loss / step, val_accurate))
    with open(os.path.join("train.log"), "a") as log:
          log.write(str('Finished Training')+"\n")
    print('Finished Training')
    
    

    训练结果后,准确率是94%

    训练日志如下:

    4.对模型进行预测

    predict.py

    
    import torch
    

    接着对其中一个花卉图片进行识别,其结果如下:

    可以看到只有一个识别结果(daisy雏菊)和准确率1.0是100%(范围是0~1,所以1对应100%)

    为了方便使用这个神经网络,接着我们将其开发成一个可视化的界面操作

    二、花卉识别系统搭建(flask)

    1.构建页面:

    2.调用神经网络模型

    main.py

    
    # coding:utf-8
     
    from flask import Flask, render_template, request, redirect, url_for, make_response, jsonify
    from werkzeug.utils import secure_filename
    import os
    import time
     
     
    ###################
    #模型所需库包
    import torch
    from model import AlexNet
    from PIL import Image
    from torchvision import transforms
    import matplotlib.pyplot as plt
    import json
     
    # read class_indict
    try:
        json_file = open('./class_indices.json', 'r')
        class_indict = json.load(json_file)
    except Exception as e:
        print(e)
        exit(-1)
     
    # create model
    model = AlexNet(num_classes=5)
    # load model weights
    model_weight_path = "./AlexNet.pth"
    #, map_location='cpu'
    model.load_state_dict(torch.load(model_weight_path, map_location='cpu'))
     
    # 关闭 Dropout
    model.eval()
     
    ###################
    from datetime import timedelta
    # 设置允许的文件格式
    ALLOWED_EXTENSIONS = set(['png', 'jpg', 'JPG', 'PNG', 'bmp'])
     
    def allowed_file(filename):
        return '.' in filename and filename.rsplit('.', 1)[1] in ALLOWED_EXTENSIONS
     
    app = Flask(__name__)
    # 设置静态文件缓存过期时间
    app.send_file_max_age_default = timedelta(seconds=1)
     
    #图片装换操作
    def tran(img_path):
         # 预处理
        data_transform = transforms.Compose(
            [transforms.Resize((224, 224)),
             transforms.ToTensor(),
             transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))])
     
        # load image
        img = Image.open("pgy2.jpg")
        #plt.imshow(img)
        # [N, C, H, W]
        img = data_transform(img)
        # expand batch dimension
        img = torch.unsqueeze(img, dim=0)
        return img
        
     
    @app.route('/upload', methods=['POST', 'GET'])  # 添加路由
    def upload():
        path=""
        if request.method == 'POST':
            f = request.files['file']
            if not (f and allowed_file(f.filename)):
                return jsonify({"error": 1001, "msg": "请检查上传的图片类型,仅限于png、PNG、jpg、JPG、bmp"})
     
            basepath = os.path.dirname(__file__)  # 当前文件所在路径
            path = secure_filename(f.filename)
            upload_path = os.path.join(basepath, 'static/images', secure_filename(f.filename))  # 注意:没有的文件夹一定要先创建,不然会提示没有该路径
            # upload_path = os.path.join(basepath, 'static/images','test.jpg')  #注意:没有的文件夹一定要先创建,不然会提示没有该路径
            print(path)
     
            img = tran('static/images'+path)
            ##########################
            #预测图片
            with torch.no_grad():
                # predict class
                output = torch.squeeze(model(img))     # 将输出压缩,即压缩掉 batch 这个维度
                predict = torch.softmax(output, dim=0)
                predict_cla = torch.argmax(predict).numpy()
                res = class_indict[str(predict_cla)]
                pred = predict[predict_cla].item()
                #print(class_indict[str(predict_cla)], predict[predict_cla].item())
            res_chinese = ""
            if res=="daisy":
                res_chinese="雏菊"
            if res=="dandelion":
                res_chinese="蒲公英"
            if res=="roses":
                res_chinese="玫瑰"
            if res=="sunflower":
                res_chinese="向日葵"
            if res=="tulips":
                res_chinese="郁金香"
     
            #print('result:', class_indict[str(predict_class)], 'accuracy:', prediction[predict_class])
            ##########################
            f.save(upload_path)
            pred = pred*100
            return render_template('upload_ok.html', path=path, res_chinese=res_chinese,pred = pred, val1=time.time())
     
        return render_template('upload.html')
     
    if __name__ == '__main__':
        # app.debug = True
        app.run(host='127.0.0.1', port=80,debug = True)
    
    

    3.系统识别结果

    
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>李运辰-花卉识别系统v1.0</title>
    	<link rel="stylesheet" type="text/CSS" href="../static/css/bootstrap.min.css" rel="external nofollow" >
    	<link rel="stylesheet" type="text/css" href="../static/css/fileinput.css" rel="external nofollow" >
        <script src="../static/js/Jquery-2.1.4.min.js"></script>
    	
        <script src="../static/js/bootstrap.min.js"></script> 
    	<script src="../static/js/fileinput.js"></script> 
    	<script src="../static/js/locales/zh.js"></script> 
    </head>
    <body>
        <h1  align="center">李运辰-花卉识别系统v1.0</h1>
    	<div align="center">
        <form action="" enctype='multipart/form-data' method='POST'>
            <input type="file" name="file" class="file"  data-show-preview="false" style="margin-top:20px;"/>
            <br>
            <input type="submit" value="上传" class="button-new btn btn-primary" style="margin-top:15px;"/>
        </form>
    	<p  style="size:15px;color:blue;">识别结果:{{res_chinese}}</p>
    	</br>
    	<p  style="size:15px;color:red;">准确率:{{pred}}%</p>
        <img src="{{ './static/images/'+path }}" width="400" height="400" alt=""/>
    	</div>
    </body>
    </html>
    
    

    4.启动系统:

    
    python main.py
    

    接着在浏览器在浏览器里面访问

    
    Http://127.0.0.1/upload
    

    出现如下界面:

    最后来一个识别过程的动图

    三、总结

    ok,这个花卉系统就已经搭建完成了,是不是超级简单,我也是趁着修了这个机器视觉这么课,才弄这么一个系统,回顾一下之前的知识,哈哈哈。

    以上就是用Python搭建一个花卉识别系统的详细内容,更多关于python 花卉识别系统的资料请关注编程网其它相关文章!

    --结束END--

    本文标题: 用python搭建一个花卉识别系统

    本文链接: https://lsjlt.com/news/10976.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    猜你喜欢
    • 用python搭建一个花卉识别系统
      目录一.开源神经网络(AlexNet)1.获取数据集2.神经网络模型3.训练神经网络4.对模型进行预测二、花卉识别系统搭建(flask)1.构建页面:2.调用神经网络模型3.系统识别结果4.启动系统:三、总结一.开源...
      99+
      2022-06-02
      python 花卉识别 python 识别系统
    • 怎么用Python识别花卉种类并自动整理分类
      这篇文章主要介绍“怎么用Python识别花卉种类并自动整理分类”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“怎么用Python识别花卉种类并自动整理分类”文章能帮助大家解决问题。百度图像识别百度的图...
      99+
      2023-07-06
    • Python如何搭建人脸识别考勤系统
      这篇文章给大家分享的是有关Python如何搭建人脸识别考勤系统的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。人脸识别的实际应用人脸识别目前正被用于让世界更安全、更智能、更方便。有几个用例:寻找失踪人员零售犯罪安全...
      99+
      2023-06-22
    • 基于Python搭建人脸识别考勤系统
      目录介绍人脸识别的实际应用构建人脸识别系统的步骤安装库导入库加载图像查找人脸位置并绘制边界框为人脸识别训练图像构建人脸识别系统人脸识别系统面临的挑战结论介绍 在本文中,你将学习如何使...
      99+
      2024-04-02
    • 基于Python编写一个图片识别系统
      目录项目介绍环境准备程序原理实现脚本测试效果总结项目介绍 本项目将使用python3去识别图片是否为色情图片,会使用到PIL这个图像处理库,并且编写算法来划分图像的皮肤区域 介绍一下...
      99+
      2024-04-02
    • 使用python怎么实现一个人脸识别打卡系统
      使用python怎么实现一个人脸识别打卡系统?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。python主要应用领域有哪些1、云计算,典型应用OpenStack。2、WEB前端开...
      99+
      2023-06-14
    • 如何搭建一个蓝牙定位系统
      本篇文章给大家分享的是有关如何搭建一个蓝牙定位系统,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。1、准备设备所需硬件设备:(1)低功率蓝牙定位器若干(如:10个),网上有卖(单...
      99+
      2023-05-31
      蓝牙定位系统
    • 基于Python创建语音识别控制系统
      下面附上参考文章,这篇文章是通过识别出来的文字来打开浏览器中的默认网站。python通过调用百度api实现语音识别 题目很简单,利用语音识别识别说出来的文字,根据文字的内容来控制图形...
      99+
      2024-04-02
    • 用Pytorch构建一个喵咪识别模型
       本文参加新星计划人工智能(Pytorch)赛道:https://bbs.csdn.net/topics/613989052 目录 一、前言 二、问题阐述及理论流程 2.1问题阐述 2.2猫咪图片识别原理  三、用PyTorch 实现  3...
      99+
      2023-09-03
      深度学习 人工智能 python
    • 用钉钉宜搭怎么建一个进销存系统
      确定需求和功能 首先,需要确定需要哪些功能,以及这些功能的具体需求和要求。根据钉钉提供的数据,企业需要的功能包括订单管理、采购管理、库存管理、销售管理、财务管理、客户管理、员工管理等。在确定需求后,需要将这些功能进行拆分和细化,使得每个功...
      99+
      2023-10-28
      进销存系统 用钉钉宜搭
    • 如何使用MongoDB开发一个简单的人脸识别系统
      如何使用MongoDB开发一个简单的人脸识别系统人脸识别技术在当今社会中被广泛应用,它可以用于安全控制、人脸支付、人脸门禁等场景。利用MongoDB数据库与人脸识别算法结合,可以开发出一个简单而高效的人脸识别系统。本文将介绍如何使用Mong...
      99+
      2023-10-22
      人脸识别 MongoDB 简单
    • 如何用Python写个简单但强大的人脸识别系统
      如何用Python写个简单但强大的人脸识别系统,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。face_recognition是一个强大、简单、易上手的人脸识别开...
      99+
      2023-06-16
    • Java+Springboot搭建一个在线网盘文件分享系统
      目录前言效果图主要代码管理员控制器:文件仓库控制器:登录控制器:FTP工具类: 前言 springboot+freemark+jpa+MySQL实现的在线网盘文件分享系统,其功能跟百...
      99+
      2024-04-02
    • 如何使用博客系统搭建个人网站
      如何使用博客系统搭建个人网站,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。博客,又译为网络日志、部落格或部落阁等,是一种通常由个人管理、不定期张贴新的文章的网站。博客上的文章通...
      99+
      2023-06-12
    • Python中怎么创建一个系统监控程序
      这期内容当中小编将会给大家带来有关Python中怎么创建一个系统监控程序,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。psutil(进程和系统实用程序)是一个跨平台的库,用于检索 Python中...
      99+
      2023-06-03
    • 怎么使用Python实现人脸离线识别系统
      本篇内容介绍了“怎么使用Python实现人脸离线识别系统”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!首先看看现在的研究现状。如上的发展趋势...
      99+
      2023-07-06
    • 搭建大数据分析系统的4个层级分别是什么
      搭建大数据分析系统的4个层级分别是什么,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。关于企业的大数据体系构建,可以分为4个层级,每个层级之间可以是递进的关系,虽然业务主导不...
      99+
      2023-06-02
    • 探索手势识别模型的算法和原理(用Python创建一个简单的手势识别训练模型)
      手势识别是计算机视觉领域的一个重要研究领域。它的目的是通过解析视频流或图像序列中的人手部动作来确定手势的含义。手势识别具有广泛的应用,例如手势控制的智能家居,虚拟现实和游戏,安防监控等领域。本文将介绍手势识别模型使用的算法和原理...
      99+
      2024-01-24
      人工智能 深度学习 机器学习
    • 【100天精通python】Day1:python入门_初识python,搭建python环境,运行第一个python小程序
       目录 专栏导读  1 初始python python 概述 python的应用领域   应用python的公司  2 搭建python 开发环境  2.1 安装python(以windows 系统为例)(1)下载安装包  (2) 下载保存...
      99+
      2023-08-31
      python 开发语言
    • YOLOv5构建安全帽检测和识别系统使用详解
      目录引言准备工作安装YOLOv5训练模型测试模型实际部署总结引言 在这篇文章中,我将介绍如何使用YOLOv5构建一个佩戴安全帽检测和识别系统。这个系统可以实时检测图像上人物是否有未...
      99+
      2023-05-14
      YOLOv5安全帽检测识别 YOLOv5 检测识别构建
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作