安泰电子世界网 首页 Ardunio 相机软件(六)

相机软件(六)

2024-11-5 17:40 | 发布者: txc | 查看: 32 | 评论: 0

简介:相机软件

motion_detect阶段

motion_detect阶段分析来自低分辨率图像流的帧。您必须配置低分辨率流才能使用此阶段。载物台通过将帧中的感兴趣区域 (ROI) 与前一帧的相应部分进行比较来检测运动。如果帧之间有足够多的像素发生变化,则此阶段指示 motion_detect.result 键下的元数据中的运动。
此阶段不依赖于第三方库。
您可以使用以下参数配置此阶段,将尺寸作为 0 到 1 之间的低分辨率图像大小的比例传递:

roi_x比较感兴趣区域的 x 偏移量(0 和 1 之间的比例)
roi_y用于比较的感兴趣区域的 y 偏移量(0 和 1 之间的比例)
roi_width用于比较的感兴趣区域的宽度(0 和 1 之间的比例)
roi_height比较的感兴趣区域的高度(比例介于 0 和 1 之间)
difference_m用于构造像素不同阈值的线性系数
difference_c常数系数,用于根据阈值 = difference_m * pixel_value + difference_c 构造像素不同的阈值
frame_period运动检测器将只运行这么多帧
hskip水平按此量子采样的像素
vksip按此量垂直子采样的像素
region_threshold必须归类为不同的像素(区域)的比例,才能算作运动
verbose将消息打印到控制台,包括运动状态更改时

默认motion_detect.json配置文件:

{
    "motion_detect" : {
		"roi_x" : 0.1,
		"roi_y" : 0.1,
		"roi_width" : 0.8,
		"roi_height" : 0.8,
		"difference_m" : 0.1,
		"difference_c" : 10,
		"region_threshold" : 0.005,
		"frame_period" : 5,
		"hskip" : 2,
		"vskip" : 2,
		"verbose" : 0
    }
}

调整差异和阈值,使算法或多或少敏感。要提高性能,请使用 hskip 和 vskip 参数。
运行以下命令以将此阶段文件与 rpicam-hello 一起使用:

rpicam-hello --lores-width 128 --lores-height 96 --post-process-file motion_detect.json

使用 OpenCV 进行后处理

注意:这些阶段需要安装 OpenCV。您可能需要使用 OpenCV 支持重新构建 rpicam-apps

sobel_cv阶段

此阶段将 Sobel 滤镜应用于图像以强调边缘。
您可以使用以下参数配置此阶段:

ksizeSobel 过滤器的内核大小

默认sobel_cv.json文件:

{
    "sobel_cv" : {
        "ksize": 5
    }
}

例:

使用 Sobel 滤镜来强调边缘。

face_detect_cv阶段

此阶段使用 OpenCV Haar 分类器来检测图像中的人脸。它在键 face_detect.results 下返回人脸位置元数据,并选择性地在图像上绘制位置。
您可以使用以下参数配置此阶段:

cascade_name可以找到 Haar 级联的文件的名称
scaling_factor确定在图像中搜索人脸的比例范围
min_neighbors需要的最小重叠邻居数才能算作一个人面
min_size最小脸部尺寸
max_size最大脸部尺寸
refresh_rate在尝试重新运行人脸检测器之前要等待多少帧
draw_features是否在返回的图像上绘制人脸位置

face_detect_cv阶段仅在预览和视频捕获期间运行。它忽略了静止图像捕获。它在分辨率介于 320×240 和 640×480 像素之间的低分辨率流上运行。
默认face_detect_cv.json文件:

{
    "face_detect_cv" : {
        "cascade_name" : "/usr/local/share/OpenCV/haarcascades/haarcascade_frontalface_alt.xml",
        "scaling_factor" : 1.1,
        "min_neighbors" : 2,
        "min_size" : 32,
        "max_size" : 256,
        "refresh_rate" : 1,
        "draw_features" : 1
    }
}

例:

将检测到的人脸绘制到图像上。

annotate_cv阶段

此阶段使用与信息文本选项相同的替换百分比将文本写入图像的顶角。
首先解释 info-text 指令,然后将任何剩余的标记传递给 strftime。
例如,若要在视频上实现日期时间戳,请传递 %F %T %z:

  • %F显示 ISO-8601 日期 (2023-03-07)

  • %T显示 24 小时当地时间(例如“09:57:12”)

  • %z显示相对于 UTC 的时区(例如“-0800”)

此阶段不输出任何元数据,但它会写入在 annotate.text 中找到的元数据,以代替 JSON 配置文件中的任何内容。这允许其他后期处理阶段将文本写入图像。
您可以使用以下参数配置此阶段:

text要写入的文本字符串
fg前景色
bg背景颜色
scale与文本大小成正比的数字
thickness确定文本粗细的数字
alpha覆盖背景像素时要应用的 alpha 量

默认annotate_cv.json文件:

{
    "annotate_cv" : {
        "text" : "Frame %frame exp %exp ag %ag dg %dg",
        "fg" : 255,
        "bg" : 0,
        "scale" : 1.0,
        "thickness" : 2,
        "alpha" : 0.3
    }
}

示例:

Writing camera and date information onto an image with annotations.

使用 TensorFlow Lite 进行后处理

先决条件

这些阶段需要导出 C++ API 的 TensorFlow Lite (TFLite) 库。TFLite 不会以这种形式分发库,但您可以下载并安装从 lindevs.com 导出 API 的版本。
安装后,您必须使用 TensorFlow Lite 支持重新编译 rpicam-apps
object_classify_tf阶段

object_classify_tf阶段

下载: https://storage.googleapis.com/download.tensorflow.org/models/mobilenet_v1_2018_08_02/mobilenet_v1_1.0_224_quant.tgz
object_classify_tf 使用 Google MobileNet v1 模型对相机图像中的对象进行分类。此阶段需要labels.txt文件。
您可以使用以下参数配置此阶段:

top_n_results要显示的结果数
refresh_rate模型运行之间必须经过的帧数
threshold_high置信度阈值(介于 0 和 1 之间),其中对象被视为存在
threshold_low置信度阈值:对象在作为匹配项丢弃之前必须低于该阈值
model_fileTFLite 模型文件的文件路径
labels_file包含对象标签的文件的文件路径
display_labels是否在图像上显示对象标签;插入要呈现的 annotate_cv 阶段的 Annotate.text 元数据
verbose将更多信息输出到控制台

文件示例object_classify_tf.json:

{
    "object_classify_tf" : {
        "top_n_results" : 2,
        "refresh_rate" : 30,
        "threshold_high" : 0.6,
        "threshold_low" : 0.4,
        "model_file" : "/home//models/mobilenet_v1_1.0_224_quant.tflite",
        "labels_file" : "/home//models/labels.txt",
        "display_labels" : 1
    },
    "annotate_cv" : {
        "text" : "",
        "fg" : 255,
        "bg" : 0,
        "scale" : 1.0,
        "thickness" : 2,
        "alpha" : 0.3
    }
}

载物台在大小为 224×224 的低分辨率流图像上运行。运行以下命令以将此阶段文件与 rpicam-hello 一起使用:

rpicam-hello --post-process-file object_classify_tf.json --lores-width 224 --lores-height 224


台式计算机和显示器的对象分类。

pose_estimation_tf阶段

下载: https://github.com/Qengineering/TensorFlow_Lite_Pose_RPi_32-bits
pose_estimation_tf使用 Google MobileNet v1 模型来检测姿势信息。
您可以使用以下参数配置此阶段:

refresh_rate模型运行之间必须经过的帧数
model_fileTFLite 模型文件的文件路径
verbose将额外信息输出到控制台

使用单独的plot_pose_cv舞台将检测到的姿势绘制到主图像上。
您可以使用以下参数配置plot_pose_cv阶段:

confidence_threshold确定要抽取多少的置信度阈值;可以小于零

文件pose_estimation_tf.json示例:

{
    "pose_estimation_tf" : {
        "refresh_rate" : 5,
        "model_file" : "posenet_mobilenet_v1_100_257x257_multi_kpt_stripped.tflite"
    },
    "plot_pose_cv" : {
       "confidence_threshold" : -0.5
    }
}

载物台在大小为 257×257 的低分辨率流图像上运行。由于 YUV420 图像的尺寸必须为偶数,因此 YUV420 图像的四舍五入为 258×258。

最新评论

友情链接:

返回顶部