配合 为巽 大佬的文章食用更佳

指北: 2024 年金砖竞赛 — 云边端赛项

环境相关

1
2
3
4
5
# Python 版本:3.7.7
Python 3.7.0 (v3.7.0:1bf9cc5093, Jun 27 2018, 04:59:51) [MSC v.1914 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
import 'atexit' # <class '_frozen_importlib.BuiltinImporter'>
>>>
1
2
# 换清华源
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
1
2
3
4
5
6
7
8
# 降低 urllib3
pip install urllib3==1.26.16

# 安装 jupyter lab
pip install jupyterlab

# 安装 openCV2
pip install opencv-python

jupyter Lab 自动补全

1. 安装 jupyterlab-lsp

1
2
pip install jupyterlab-lsp
pip install python-lsp-server

2. 开启自动补全

路径:Settings -> Advanced Settings Editor -> Notebook

1
2
3
{
"continuousHinting": true
}

读取视频并抽帧

打开”com_rec/task1/collect/ 数据采集.ipynb”文件,完成以下任务:

1. 读取视频并查看视频信息

1
2
3
4
5
6
7
8
9
10
11
12
# <1> 读取视频
cap = cv2.VideoCapture(Video_path)

# <2> 判断 cap 是否开启
if cap.isOpened():
pass

# <3> 获取视频的宽度像素,cv2.CAP_PROP_FRAME_WIDTH 上文可复制
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))

# <4> 获取视频像素长度
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))

2. 视频抽帧

1
2
3
4
5
6
7
8
9
10
11
# <1> 读取图像
ret,frame = cap.read()

# <2> 保存图像,以 fame_.xxximg 命名
cv2.imwrite("fame_{}".format(num),self.image) # imwrite 方法默认 jpg 后缀

# <3> 释放资源,通用方法
cap.release()
cv2.destoryAllWindows()
# <3> 释放资源_2,预设方法
camera_th.Stop()

数据处理

打开”com_rec/task1/process/ 数据处理.ipynb”文件,完成以下任务

1. 完成系统 OS 模块使用

1
2
3
4
5
6
7
8
9
10
# <1> 判断文件夹是否存在
if os.path.exists("path")

# <2> 查看 picture 文件下的文件,返回给 filename_list (不考虑二级目录和文件)
filename_list = os.listdir(picture)

# <3> 将 picture 文件夹内的所有.png 拓展名文件改为.jpg 拓展名,并保存在 rename 文件夹内
for filename in filename_list:
filename.replace(".png", "jpg")
os.rename(sourece_path, rename)

2. 完成 2.3 图像颜色转换

1
2
3
4
5
6
# <1> 定义图像盒子,赋值给 imgbox_GARY
imgbox_GARY = image[y_start, x_start,width,height]
# <2> 读取当前路径下 "test.png" 文件
image = cv2.imread(test.png)
# <3> 图像灰度转换
image_GARY = cv2.cvtColor(iamge_GARY, COLOR_BGR2GRAY)

3. 完成 2.4 二值化处理

1
2
# <1> 传入灰度图像,阈值为变量 threshold,超过阈值像素改为 255,采用 cv2.THRESH_BINARY_INV 的实施方式
image = cv2.threshold(image_GARY, threshold, 255, cv2.THRESH_BINARY_INV)

4. 完成 2.5 图像边缘检测

1
2
3
4
5
6
# <1> 读取当前目录下的 wuyanzu.png 的灰度图片
image = imread(wuyanzu.png) # 如果本身是灰度
image = imread(wuyanzu.png, cv2.IMREAD_GRAYSCALE) # 如果需要转化成灰度

# <2> 进行图片边缘检测,最小阈值为 128,最大阈值为 200
end = cv2.Canny(image, 128, 200)

其他特别备注相关

1
2
3
4
5
6
7
8
9
10
# CV2,窗口等待 5ms
cv2.waitKey(5)

# Time 级,睡 5ms
time.sleep(0.005)

# 直接读取并转换为灰度图片
image = cv2.imread(path, cv2.IMREAD_GRAYSCALE)


基于给定评分细则和标准

数据采集

  1. 查看“camera.ipynb”代码块 1:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    # 读取摄像头一帧图像
    cv2.VideoCapture(camera_id)

    # 图象在 "image_win", 括号内的 2 个参数
    cv2.imshow("image_win", image)

    # 图像显示延迟 5ms
    cv2.waitkey(5)

    # 图像保存,括号内 2 个参数
    cv2.imwrite("image/image_{}.jpg".format(num), self.image)
  2. 查看“camera.ipynb”代码块 2:

    1
    2
    3
    4
    5
    # 实例化化 CameraThread 类,括号内的 3 个参数
    camera_th = CameraThread(0, 640, 480)

    # 启动摄像头线程
    camera_th.start()
  3. 查看“camera.ipynb”代码块 3:

    1
    2
    3
    4
    5
    # 调用摄像头线程图像保存方法
    camera_th.save_img(num)

    # 停止摄像头线程,释放资源
    camera_th.stop()
  4. 查看 image 文件夹

    pass

数据特征提取

  1. 查看“process.ipynb”代码块 1:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    # 生成旋转矩阵,括号内 3 个参数
    # 补全括号内三个形参,中心点 center, 旋转角度 angle, 图像缩放比 scale
    M = cv2.getRotationMartix2D(center, angle, scale)

    # 执行旋转,括号内 3 个参数
    # 补全括号内三个形参, 图片 img, 旋转矩阵 M, 坐标(w, h)
    rotateg_img = cv2.warpAffine(img, M, (w, h))

    # 获取目标文件夹文件数目
    # 文件夹内完全由文件组成,不考虑二级目录的情况
    img_num = len(img_list)

    # 提取 img_list 前 20% 图像
    # 向前 20% 切片
    for img in img_list[:(img_num * 0.2)]:

    # 调用图片旋转方法,括号内 2 个参数 '
    # 补全 rotate 方法两个实参, 图片内容 img_data, 旋转角度 -90
    rotated_img = rotate(img_data, -90)

    # 图像保存,括号内 2 个参数
    # 补全 imwrite 方法两个形参, 保存路径 save_path, 旋转后图片 rotated_img
    cv2.imwtire(save_path, rotated_img)

    ## 有运行报文
    pass
  2. 查看“processed”文件夹:文件夹内有 2 张图片文件

算法训练与性能评估

AI 应用系统开发

  1. 完成“2.2 人脸检测”:
1
2
3
4
# 请在下方 `<1>` 处填写代码, 读取位于 `./src/wuyanzu.png` 下的待测图片
# 请在下方 `<2>` 处填写代码,将 `img` 转为灰度图
# 请在下方 `<3>` 处填写代码,绘制矩形框
# 请在下方 `<4>` 处填写代码,展示出识别后的结果图片