【人工智能笔记】第十节 Tensorflow 2.0 实现指针仪表方向纠正及指针识别(上)

基于TensorFlow目标检测算法SSD来定位圆形指针式仪表表盘 圆形指针式仪表自动识别 —— 圆形表盘定位 目的:检测出圆形表盘边框的所在矩形区域,排除无关背景干扰,提升后续算法计算速度和识别精度。 SSD目标检测算法: 采用基于深度学习的目标检测算法SSD(single shot multibox detector),相比Faster RCNN 有明显的速度优势,相比YOLO又有明显的mAP优势(不过已经被CVPR 2017的YOLO9000超越)。 参考TensorFlow官方开源的目标检测代码: https://github.com/tensorflow/mode 阅读详情

这次目标是实现指针仪表方向纠正及指针识别。这现实情况下,要做指针仪表识别,因为各种拍摄角度、光线与指针值的不同,通常需要标注大量素材,而且这种标注相对复杂。因此为解决该问题,我使用了迁移学习的方法,下面将详细讲解。

将由三部分讲解整个过程:

  1. 搭建Django服务,利用ECharts报表生成虚拟仪表图,作为第一阶段的训练素材。
  2. 编写模型训练与识别代码,并利用虚拟图做预训练,进行方向纠正与指针识别。
  3. 人手标注现实仪表图,并转换成训练素材,进行迁移学习。

一、创建服务

创建Django服务可参考官方文档(中文),快速入门部分,文档链接:https://docs.djangoproject.com/zh-hans/3.0/

# 创建项目
django-admin startproject ai_server

# 进入项目目录
cd ai_server

# 创建应用
python manage.py startapp ai_api

二、生成图表 

创建虚拟仪表图生成页面,通过将生成仪表图提交到服务,由服务保存到本地。

具体参数可查询ECharts官方文档:https://echarts.apache.org/zh/option.html#series-gauge

在ai_api/static/gauge路径下创建generate_image_save.html文件,内容如下:

<!DOCTYPE html>

<head>
  <meta charset="utf-8">
  <title>ECharts</title>
</head>

<body>
  <!-- 为ECharts准备一个具备大小(宽高)的Dom -->
  <div id="main" style="height:400px; width: 400px;"></div>
  <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
  <!-- ECharts单文件引入 -->
  <script src="http://echarts.baidu.com/build/dist/echarts.js"></script>
  <script type="text/javascript">
    function rgb() {//rgb颜色随机
      var r = Math.floor(Math.random() * 256);
      var g = Math.floor(Math.random() * 256);
      var b = Math.floor(Math.random() * 256);
      var rgb = '(' + r + ',' + g + ',' + b + ')';
      return rgb;
    }
    function color16() {//十六进制颜色随机
      var r = Math.floor(Math.random() * 256);
      var g = Math.floor(Math.random() * 256);
      var b = Math.floor(Math.random() * 256);
      var color = '#' + r.toString(16) + g.toString(16) + b.toString(16);
      return color;
    }
    // 路径配置
    require.config({
      paths: {
        echarts: 'http://echarts.baidu.com/build/dist'
      }
    });

    // 使用
    require(
      [
        'echarts',
        'echarts/chart/gauge' // 按需加载
      ],
      function (ec) {
        // 基于准备好的dom,初始化echarts图表
        let myChart = ec.init(document.getElementById('main'));

        // 为echarts对象加载数据 
        // myChart.setOption(option);
        let updateFun = () => {
          // let startAngle = Math.round(Math.random() * 360)
          // let endAngle = startAngle - Math.round(Math.random() * 300) - 30
          let startAngle = 180 + Math.round(Math.random() * 90) - 45
          let endAngle = 30 + Math.round(Math.random() * 120) - 60
          let option = {
            animation: false,
            // tooltip: {
            //   formatter: "{a} <br/>{b} : {c}%"
            // },
            // toolbox: {
            //   show: true,
            //   feature: {
            //     mark: { show: true },
            //     restore: { show: true },
            //     saveAsImage: { show: true }
            //   }
            // },
            series: [
              {
                name: '业务指标',
                type: 'gauge',
                legendHoverLink: false,
                splitNumber: Math.round(Math.random() * 10),       // 分割段数,默认为5
                startAngle: startAngle,
                endAngle: endAngle,
                axisLine: {            // 坐标轴线
                  lineStyle: {       // 属性lineStyle控制线条样式
                    color: [[0.2, color16()], [0.8, color16()], [1, color16()]],
                    width: Math.round(Math.random() * 10) + 3
                  }
                },
                axisTick: {            // 坐标轴小标记
                  splitNumber: Math.round(Math.random() * 10),   // 每份split细分多少段
                  length: Math.round(Math.random() * 20),        // 属性length控制线长
                  lineStyle: {       // 属性lineStyle控制线条样式
                    color: color16()
                  }
                },
                axisLabel: {           // 坐标轴文本标签,详见axis.axisLabel
                  textStyle: {       // 其余属性默认使用全局文本样式,详见TEXTSTYLE
                    color: color16()
                  }
                },
                splitLine: {           // 分隔线
                  show: true,        // 默认显示,属性show控制显示与否
                  length: Math.round(Math.random() * 20) + 25,         // 属性length控制线长
                  lineStyle: {       // 属性lineStyle(详见lineStyle)控制线条样式
                    color: color16()
                  }
                },
                pointer: {
                  length: (Math.round(Math.random() * 40) + 60) + '%',
                  width: Math.round(Math.random() * 8) + 1,
                  color: color16()
                },
                title: {
                  show: false,
                  offsetCenter: [0, '-40%'],       // x, y,单位px
                  textStyle: {       // 其余属性默认使用全局文本样式,详见TEXTSTYLE
                    fontWeight: 'bolder'
                  }
                },
                detail: {
                  show: false,
                  formatter: '{value}%',
                  textStyle: {       // 其余属性默认使用全局文本样式,详见TEXTSTYLE
                    color: color16(),
                    fontWeight: 'bolder'
                  }
                },
                data: [{ value: 50, name: '' }]
              }
            ]
          };
          option.series[0].data[0].value = (Math.random() * 100).toFixed(2) - 0;
          myChart.setOption(option, true);
          let img = myChart.getDataURL();
          // console.log('图片数据:', img);
          axios.post('/ai_api/gauge/gauge_save', {
            img_data: img,
            value: option.series[0].data[0].value
          })
            .then(function (response) {
              console.log(response);
              timeTicket = setTimeout(updateFun, 1);
            })
            .catch(function (error) {
              console.log(error);
            });
        }
        timeTicket = setTimeout(updateFun, 1);
      }
    );
  </script>
</body>

修改ai_server\settings.py文件,在文件最后增加下面代码:

STATIC_URL = '/static/'

STATICFILES_DIRS = [
    "ai_api/static",
]

DATA_UPLOAD_MAX_MEMORY_SIZE = 52428800  #默认设置为50M

 创建视图文件,ai_api\views\gauge.py,将图片保存到本地,代码如下:

def gauge_save(request):
    '''保存训练图片'''
    global save_num
    save_num += 0.000001
    request_data = json.loads(request.body)
    # print('request_data:', request_data)
    img_data = request_data['img_data'].split(',')[1]
    img_data = image_helpler.base64ToBytes(img_data)
    img = image_helpler.bytesToOpenCVImage(img_data)
    value = request_data['value']
    img_name = ('%s_%.2f.jpg') % (str(save_num), value)
    path = "./image_data/" + img_name

    image_helpler.openCVImageToFile(path, img)

    jsonObj = {
        "value": value,
    }
    return HttpResponse(json.dumps(jsonObj), content_type="application/json")

增加接口路由,实际路由地址为:/ai_api/gauge/gauge_save

增加路由方法请参考Django文档。

最后用浏览器打开:http://127.0.0.1:8000/static/generate_image_save.html,页面会自动生成图片到文件夹。推荐生成20000以上文件用于作为下一节训练素材。

效果图

下一节,将会讲解如何建立模型,进行方向纠正与指针识别。源码会在第三节发布,敬请关注!

AI射击训练分析工具Viscose:从部署到实战的完整指南 计算机视觉与姿态估计技术正深刻改变传统训练模式,其核心原理是通过摄像头捕捉人体关键点运动,结合深度学习模型进行动作分析与量化。这项技术的价值在于将主观经验转化为客观数据,为科学训练提供精准反馈。在体育训练和电子竞技等应用场景中,它能有效识别如晃动、预瞄偏差等细微技术问题。本文聚焦的Viscose项目,正是这一技术的典型实践,它通过部署AI分析工具,帮助射击爱好者与FPS玩家量化瞄准稳定性、优化击发时机,从而实现训练效率的显著提升。 阅读详情

相关推荐

AI落地为何水土不服?重建真实世界尺寸的七条铁律

人工智能在实际场景中失效,往往并非模型精度不足,而是其‘理解世界’的能力严重萎缩——问题边界窄、上下文缺失、约束忽略、价值主体单一。这种‘小世界’现象本质是AI系统脱离物理现实、社会语境与人类行为复杂性的结果。从制造业预测性维护到基层医疗辅助,大量项目失败根源在于将‘数据拟合’等同于‘问题解决’。本文聚焦AI工程化落地中的世界建模能力,结合田野实践提炼可操作的诊断框架与修复路径,涵盖上下文感知增强、轻量化部署适配、多角色价值对齐、失败驱动迭代等关键技术策略,为面向车间、诊室、田埂等真实环境的AI开发者提供一

weixin_33716154的博客 526

python视觉之各种仪表识别

视觉之工业表计识别单指针、单刻度仪表 随着人工智能的发展,现在各行各业都在开始被AI渗透,其中最成功的当属工业,尤其是在安防、巡检板块。该文章将就工业中比较有挑战的仪表识别进行记录,免得自己以后忘了。毕竟做算法这一块,逻辑是最关键的,打死也不能忘的 目前本人做过的项目,算得上是把常见的一些仪表都做了,当然肯定也有我没接触到的种类 图1 图2 图3 图4 图5 图6 从技术的角度,我将他们分为了4种,针对四种类型,分别做了一个project 单指针、单刻度仪表 就像图1、图2、图4,这种类型的仪表应该是最

royallucky的博客 1万+

HP AI开发平台:工作站级多用户AI协同开发实战指南

AI开发平台本质是面向中小团队的算力协同基础设施,其核心在于将Docker与Kubernetes的复杂性封装为低门槛Web操作,实现GPU资源细粒度切分、多用户配额隔离与数据-训练-部署闭环。相比公有云方案,它以静音工作站为载体,在保障ECC显存可靠性、NFS高效共享和MIG硬件级GPU隔离的前提下,显著降低运维成本与网络延迟。尤其适合教育、医疗等对数据不出域、调试响应快、团队协作强有刚性需求的场景——HP AI开发平台正是这一理念的工程化落地,让算法工程师专注模型,而非调度命令。

weixin_33805992的博客 463

走进AI时代的文档识别技术 之表格图像识别

本文链接:https://blog.csdn.net/ShuYunBIGDATA/article/details/103007795 版权

张伟的专栏 567

AI Act风险分级与合规落地:从高风险判定到技术文档实操

人工智能监管已进入场景化、精细化新阶段。欧盟《人工智能法案》(AI Act)摒弃‘技术中立’旧范式,以应用场景为锚点,构建覆盖不可接受、高风险、有限风险与最小风险的四阶分级体系——其核心在于判断AI是否在关键环节‘说了算’。该框架深刻影响招聘筛选、信贷评估、教育评分、医疗辅助等高权重业务系统,要求企业建立可验证的技术文档、人机协同机制、数据偏差治理及持续监控能力。对出海SaaS、AI原生应用及大模型集成方而言,合规不再是法务附加项,而是产品设计、工程交付与供应链管理的底层约束。本文聚焦AI Act附件三八大

weixin_34184561的博客 392

怪异指针的识别法,多种多样的嵌套指针识别法

C语言所有复杂的指针声明,都是由各种声明嵌套构成的。如何解读复杂指针声明呢?右左法则是一个既著名又常用的方法。

基于 Tensorflow 2.x 从零训练 15 点人脸关键点检测模型

标签 ,是表示着图像上真实关键点的坐标,直接让模型回归真实点的话,浮动会有点大,因此这里将真实点转为相对于图像的比例点,也就是直接除于图像的大小,得到一个相对点的位置,相对点的位置都在。年中国科学院深圳研究院提出的用于人脸检测任务的多任务神经网络模型,该模型采用了三个级联的网络,还采用候选框加分类器的思想,进行快速高效的人脸检测。上面提到实际训练的数据集并不多,因此有必要通过数据增强扩充数据,数据增强这里就做一个随机对比度的改变,这样不会影响关键点的位置,增强部分放在模型的。

小毕超博客 2379

Tensorflow训练的角度检测Resnet模型

Tensorflow训练的角度检测Resnet模型,分为4个分类,用来检测文本角度

【人工智能笔记】第十二节 Tensorflow 2.0 实现指针仪表方向纠正及指针识别(下)

相关资料: 【人工智能笔记】第十节 Tensorflow 2.0 实现指针仪表方向纠正及指针识别(上) 【人工智能笔记】第十一节 Tensorflow 2.0 实现指针仪表方向纠正及指针识别(中) 这一节,会介绍如何使用现实素材继续训练模型,来完成真正的仪表识别。首先我们会使用标注工具对素材进行标注,然后使用实际标注素材进行训练,编写相应的训练代码。下面,我会逐步介绍如何实现。 一、使用标...

不定时更新AI技术tensorflow实现方式,欢迎关注,有问题请私信我。 1617

告别底噪与失真:手把手教你调校WM8988音频Codec的输入输出增益链

本文详细介绍了如何调校WM8988音频Codec的输入输出增益链,解决底噪与失真问题。从模拟输入增益、数字转换增益到输出放大增益,提供了具体的寄存器配置和调试策略,帮助开发者优化音频信号处理链,提升音质表现。

weixin_30485379的博客 363

物理学建模及仿真平台Chrono安装

Chrono是一个基于物理学的建模和仿真基础设施,它是在C++中实现的独立于平台的开源设计。一个projectchrono库可以嵌入到一个软件项目中,例如在可变形地形上运行的轮式和履带式车辆、机器人、机械电子系统、顺应性机构和流体固体相互作用现象。系统可以由刚性和柔性/顺应性部件组成,并带有约束、电机和接触;部件可以具有三维形状,以便进行碰撞检测。然而安装还是出现了一些问题,所以在此总结。已经装好visual studio。

Already8888的博客 6501

仪表盘读数识别

向AI转型的程序员都关注了这个号????????????本次任务的仪表数据集存在以下难点:1、仪表刻度存在遮挡、模糊等问题,影响OCR识别2、仪表图像存在旋转、倾斜问题,影响读数测量算法设计算法分为4个流程,首先用yolov5s模型从原图中识别出仪,接着用yolov8x-pose模型检测出仪表中的刻度线、指针的关键点,再用DBNetpp模型检测出数值框并用SATRN模型进行文本识别,最后后处理得到读数结果。(1)基...

datayx的文章 1621

【Python】SimpleITK使用笔记

1. 概念 1.1 nii格式 1.2 SimpleITK 1.3 SimpleITK 图像 2. 基本操作 2.1 常见属性 2.1 读取和保存图像 2.2 SimpleITK图像数据和Numpy矩阵数据之间的转换

See_Star的博客 7898

【人工智能笔记】第十一节 Tensorflow 2.0 实现指针仪表方向纠正及指针识别(中)

相关资料: 【人工智能笔记】第十节 Tensorflow 2.0 实现指针仪表方向纠正及指针识别(上) 这次创建预测模型,用于预测仪表指针值,与用于方向纠正4个点坐标。预测坐标点采用预测4个基准点偏移值的方式,而不是直接预测实际坐标值。训练前会对图片做数据增强,进行随机颜色、透视变换、增加噪点等操作,防止模型过拟合。 一、创建模型 1.特征提取模型使用Darknet-53,最后接(9*1...

不定时更新AI技术tensorflow实现方式,欢迎关注,有问题请私信我。 1528

【Unity】ABB CRB 15000 外部引导运动实战:从配置到实时控制

本文详细介绍了ABB CRB 15000协作机器人的外部引导运动(EGM)功能在Unity环境中的实战应用。从RobotStudio配置到Unity实时通信架构,再到EGM运动控制技巧和问题排查,全面解析如何实现机器人的高精度实时控制。通过实际案例展示EGM技术在精密装配等场景中的显著效果,帮助开发者快速掌握这一先进技术。

weixin_29057695的博客 445

b站视频链接快速获取

快速获取b站视频数据

qq_45889931的博客 7808

鸿蒙Flutter实战:构建智能健身教练应用

本文介绍了基于鸿蒙生态的智能健身应用开发方案。该应用通过Flutter框架实现跨设备协同,整合手机、智能手表和智慧屏,为用户提供个性化健身指导。核心功能包括:1)基于用户数据的智能训练计划生成;2)实时动作纠正引擎;3)多设备训练管理;4)可视化数据分析。技术架构采用鸿蒙分布式能力,结合计算机视觉和健康大数据分析,支持家庭健身、户外运动等多种场景。项目亮点在于实现专业级私教服务的移动化,让用户随时随地获得科学健身指导,解决现代人缺乏运动的问题。

2501_93920050的博客 1628

【YOLOv13多模态融合改进】| CFT:跨模态融合Transformer | 利用Transformer的自注意力机制,解决跨模态融合中的长距离依赖和全局信息整合问题

本文记录的是利用 CFT 模块改进 YOLOv13 的多模态目标检测网络模型。的设计出发点在于解决传统多模态检测中跨模态特征融合不充分的问题,即当不同模态数据需协同检测时,基于CNN的方法因局部卷积的局限性,难以捕捉长距离依赖和全局模态间的互补信息,导致复杂光照、遮挡等场景下检测精度不足。本文利用模块,将多模态特征序列拼接后自动学习模态内与模态间的交互权重,在特征提取阶段整合全局上下文信息,增强对不同模态互补特征的利用能力,从而提升模型在多模态场景下的检测鲁棒性与准确性。Cross-Modality Fus

Limiiiing的博客 540

智能哑铃项目全解析:从IMU传感器到边缘计算的硬件实现

在物联网和智能硬件领域,传感器技术是实现设备智能化的基础。惯性测量单元(IMU)作为核心传感器,通过融合加速度计和陀螺仪数据,能够精准感知物体的运动状态和姿态变化。其技术价值在于将物理世界的动作转化为可量化的数字信息,为数据分析提供基础。这一原理广泛应用于运动捕捉、无人机导航和智能穿戴设备。在健身科技场景中,结合边缘计算在本地进行实时数据处理和动作识别,能有效降低功耗与延迟,提升用户体验。本文以智能综合体能训练哑铃为例,深入探讨了如何利用高性能IMU和低功耗蓝牙(BLE)通信,构建一个能承受高冲击、实时反馈

weixin_30376083的博客 353

12S BMS 核心设计:基于 STM32H743+BQ34Z100 的 SOC/SOH 实现与全链路技术解析(上)

本文详细介绍了基于STM32H743和BQ34Z100的12串锂电池管理系统(BMS)设计。该系统采用主控制器+专用电量监测计架构,可实现高精度SOC(±1%)和SOH(±2%)估算,支持36V-50.4V电压范围。硬件设计包括电压/电流采样、温度测量、保护电路等模块,软件实现基于HAL库开发,采用DMA方式提高I2C通信效率。系统通过TI专利的ImpedanceTrack™算法实现三维融合估算,并具备完善的保护功能。该设计适用于电动工具、轻型电动车等中功率设备,具有精度高、响应快。

bother3000的博客 1393

基于ADMM的TV正则化最小化稀疏实现图像重建

ADMM算法是一种求解带有约束条件的优化问题的有效方法,它可以将原问题分解成两个子问题,然后交替求解这两个子问题,直到收敛。为了解决这些问题,研究人员提出了许多图像重建方法,其中一种常用的方法是基于正则化的方法。在图像重建中,TV正则化是一种比较常用的正则化方法,可以有效地降低图像的噪声,并保持图像细节特征。通过本文的介绍和源代码的演示,我们可以看出基于ADMM的TV正则化最小化稀疏实现图像重建的方法是一种简单、高效、有效的图像重建方法,能够在一定程度上提高图像质量,对于实际应用具有一定的参考意义。

学习使你进步。 1762

信通院认证AI低代码平台如何重塑制造业报工与质检

在制造业数字化转型中,低代码开发平台和人工智能技术正成为解决业务场景碎片化与开发同质化矛盾的关键工具。其核心原理在于通过可视化建模和自动化技术,将通用的业务流程(如数据采集、流程审批、视觉识别)封装为可复用的组件,从而降低开发门槛、提升交付效率。这一技术组合的工程价值在于实现了快速应用构建与AI能力的平民化集成,尤其适用于报工、质检等高频、刚需场景。通过OCR智能识别、设备数据直连和零代码视觉模型训练,企业能够将人工经验沉淀为算法标准,构建实时透明的数据流水线。本文以信通院认证的AI低代码平台为例,深入剖析

cuemes08808的博客 457

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

AI与IT安全的双向重塑:从攻击检测到模型治理

人工智能与IT安全正从单向赋能走向深度耦合的双向重塑。其核心原理在于AI重构攻击链(如GAN生成合法异常请求)与防御范式(如多模态GNN研判、动态阈值响应),技术价值体现为将漏洞修复周期压缩至小时级、实现告警到阻断≤8秒的闭环响应。典型应用场景覆盖金融API防护、政务云智能响应、车载语音合规治理等高敏领域。尤其在AI模型自身成为新攻击面的当下,‘数据可验证、过程可验证、结果可验证’已成为等保2.0与GDPR落地的关键要求,而对抗样本鲁棒性与模型可解释性(如LIME)则直接决定SOC实战效能。

weixin_30522095的博客 411

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

AI治理不是贴标语,而是嵌入开发流程的硬性检查点

AI治理是保障人工智能系统安全、公平与可信运行的基础工程能力,其核心在于将抽象伦理原则转化为可测量、可干预、可追溯的技术动作。它源于对模型决策链路的风险识别,依托数据谱系追踪、动态阈值监控与跨职能共治机制,实现从‘事后补救’到‘事前校准’的范式升级。在医疗、金融、教育等强监管场景中,治理已不再只是合规要求,更是降低误判风险、提升用户信任、支撑商业可持续的关键技术杠杆。本文聚焦Auxane Boch提出的最小可行治理检查点(MVGC)、AI资产风险热力图与动态阈值看板三大实操方法,提供一套无需大平台、不依赖专

weixin_30631587的博客 367

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

AI伦理工程化:开发者可落地的五项技术实践

AI伦理已从抽象原则演进为必须嵌入开发流程的技术能力。其核心在于将‘公平性’‘可解释性’‘鲁棒性’等概念,转化为可测量、可自动化、可审计的工程动作——如偏见压力测试、SHAP实时解释服务、数据血缘校验流水线。这些实践不仅满足GDPR、NIST RMF等合规要求,更直接提升模型在真实场景中的稳定性与用户信任度。在金融风控、智能客服、工业质检等高风险领域,伦理检查正成为与准确率、延迟同等重要的KPI。本文聚焦一线开发者视角,提供从Git钩子到Prometheus监控、从对抗扰动脚本到跨部门评审机制的完整施工路径

vanadiumlin 446

医学AI安全与隐私:从数据主权到联邦学习的实战防护策略

在数据驱动的医疗健康领域,数据安全与隐私保护是技术应用的核心基石。其原理在于通过加密、访问控制等技术手段,在数据的全生命周期内保障其机密性、完整性和可用性。这不仅是合规要求,更是释放数据价值、推动精准医疗和医学研究的关键。联邦学习、差分隐私等隐私增强计算技术,为实现“数据可用不可见”提供了工程实践路径,允许在保护敏感信息的同时进行联合建模与分析。这些技术在药物研发、跨机构临床研究、流行病预测等场景中尤为重要。本文聚焦医学AI领域,深入探讨了在应对数据跨境、算法黑箱等挑战时,如何体系化地融合技术防护与治理框架

weixin_30693683的博客 310
上一篇: 【人工智能笔记】第九节:Windows下编译python OpenCV 4.2.0,SIFT特征提取,及透视变换纠正物体方向
下一篇: 【人工智能笔记】第十一节 Tensorflow 2.0 实现指针仪表方向纠正及指针识别(中)
PPHT-H
博客等级 码龄18年 6254粉丝 84原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

PPHT-H

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值