“Hello AI World” 扩充参数解析功能

本文的目的就是协助大家,以前面的 “10lines.py” 代码为基础,扩充解析参数的能力。
很多朋友一开始对 “10行代码的威力 ” 产生了很大的兴趣,因为容易上手而且性能很好。但是接下来想要再扩充的时候,就发现遇到了很大的瓶颈,因为真实用途的代码,不能在每次执行的时候,都进去修改路径后再执行。幸好 Python 属于解释型的语言,因此修改后直接执行还不算太麻烦,只不过这样的方式只能用于实验,无法变成具备扩充性的代码。

本文的目的就是协助大家,以前面的 “10lines.py” 代码为基础,扩充解析参数的能力。这样就能直接在指令行透过给定参数的方式,来改变所要的功能。这样的方式也才能加入脚本之中,根据不同条件去进行不同的任务。

事实上,在 Python 开发资源中的 ”argparse” 模块,就提供了非常轻松的方式协助我们的程式去接受外部给定的参数,例如用 “--input=csi://0” 来指派 CSI 摄像头作为输入。

接下来,就开始进入本文的重点,带着大家把手上的代码变得更加强大。
简单的执行步骤如下:

  • 在代码中用 “import argparse” 汇入这个功能模块,
  • 用 ArgumentParser() 函数创建一个参数对象,
  • 用 add_argument() 函数,逐一添加所需要的参数。这个步骤是比较繁琐却最重要的,本文只用最简单的方式协助大家添加参数,至于更完整的用法,请自行寻找相关说明。
  • 最后,为了简化执行步骤,我们在代码第一行加入 “#!/usr/bin/python3”,用来指示这个代码可以直接调用 “/usr/bin/python3” 进行解译,这样就能在命令行中直接执行,前面不需再输入 “python3” 命令,这是目前 Python3 代码很常用的做法。

根据上面的步骤,我们将 10lines.py 进行以下的修改,并存成 “testArgv.py”,粗体底线标识的是修改过的部分:


在上面代码中,可能有人发现有个比较特殊的地方,就是在添加参数中,第一个参数是 “input”,后面三个添加的参数是 “--output”、“--network”与“--threshold”, 这两种参数有什么不一样呢?

第一个 “input” 前面没有用 “--” 作指示,表示这个参数是 “强制” 给予的,在指令行里并不需要 “--input=” 去指定,解析工具会自动在命令行中找到 “不属于其他参数的字符串”,待会直接看下面的范例就能理解。

后面的 “--output”、“--network”与“--threshold” 是“非强制”的参数,如果在指令行后面没有给定参数时,就会使用个别参数的预设值(default)。这部分在指令行中,就需要透过直接对应的 “--network=” 的方式来体统。

这里直接用几个范例来说明,最容易理解。首先执行以下指令:

因为指令没提供 input 这个 “必要参数”,结果出现以下错误信息:

试试以下这三个指令,前面两个请根据您设备上的摄像头种类,第三个是用 Jetpack 预安装上的 VisionWorks 的演示视频文件,至少这个可以成功执行:

好了,在上面的指令中可以非常清楚的了解参数 “input” 的用法,没有其他三个参数也没关系,因为那不是 “强制” 的,接下来我们试试看,如果输入其他参数之后,会如何变化?

第一道指令,以 CSI 摄像头为数据源,执行物件检测的推理识别后,然后将结果输出到 testArgv.mp4 视频文件,请自行测试。

第二道指令加入 --threshold=0.01 这个参数,因为这个阈值不能为 0,因此我们试试看如果是 0.01 的话,会得到什么结果?(如下图)

此外可以看到 “csi://0” 并不一定非得摆在第一位,摆在指令中的任何一个顺位都可以,argparse 模块知道如何去解析出应该的对应。

第三道指令除了测试用 “--network=” 去改变模型选项之外,还测试将推理结果输出到一个目录中,存成一系列的图像文件(如下图)

好了,是不是已经可以掌握这种添加参数的方式了呢?掌握本文内容,能让你的代码立即从纯实验的阶段,提升到实用的阶段!

 


评论:
相关文章

ESP32 利用 SPI 连通 TFT 彩屏

本文给出了一个ESP32与SPI 接口TFT显示屏接线的详细说明,供大家参考。


树莓派 wiringPi 用户手册

wiringPi库是由Gordon Henderson所编写并维护的一个用C语言写成的类库。主要是作为 BCM2835 芯片的 GPIO 库。还包括了I2C 库、SPI 库、UART 库和软件 PWM 库等。


初识ESP32-S3芯片

ESP32-S3 是乐鑫发布的一款集成 2.4 GHz Wi-Fi 和 Bluetooth 5 (LE) 的 MCU 系统级芯片。


Jetbot基础教程-软件环境安装

Jetbot 需要与很多周边设备互动,并且使用很多深度学习框架以及 Jupyter 交互界面进行操作,因此需要安装与调试的内容很多。


LVGL简介

LVGL(Light and Versatile Graphics Library,轻巧而多功能的图形库)是一个免费的开放源代码图形库,它提供创建具有易于使用的图形元素,精美的视觉效果和低内存占用的嵌入式GUI所需的一切。



《中小学人工智能通识教育指南(2025年版)》全文发布

近日,教育部基础教育教学指导委员会正式发布《中小学人工智能通识教育指南(2025年版)》。



掌控板

掌控板由创客教育专家委员会推出, 是一款教学用开源硬件。可以编程,不管是图形还是python编程都可以,也可以造物,还可以轻松玩转物联网或是可穿戴应用。

Jetson Nano 基础教程

作者:英伟达小助理   共52讲

Jetson Nano 推出 2GB 内存版本,不仅承袭了 Jetson Nano 所有 AI 开发环境与 IOT 控制功能,也能学习或开发 Python、OpenCV 与 AI 深度学习、ROS 自动控制等应用。

课程