金砖创新-云边端应用开发学习记录

被拉去参加一个没听过的奇奇怪怪的比赛,学习了一些奇奇怪怪的深度学习的东西,记录一下奇奇怪怪的事情

配合为巽大佬的文章食用更佳2024 年金砖竞赛 – 云边端赛项

环境相关

# 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'>
>>>
# 换清华源
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
# 降低urllib3
pip install urllib3==1.26.16

# 安装jupyter lab
pip install jupyterlab

# 安装openCV2
pip install opencv-python

jupyter Lab自动补全

1. 安装jupyterlab-lsp

pip install jupyterlab-lsp
pip install python-lsp-server

2. 开启自动补全

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

{
"continuousHinting": true
}

读取视频并抽帧

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

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

# <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>读取图像
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>判断文件夹是否存在
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>定义图像盒子,赋值给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>传入灰度图像,阈值为变量threshold,超过阈值像素改为255,采用cv2.THRESH_BINARY_INV的实施方式
image = cv2.threshold(image_GARY, threshold, 255, cv2.THRESH_BINARY_INV)

4. 完成2.5图像边缘检测

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

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

其他特别备注相关

# CV2,窗口等待5ms
cv2.waitKey(5)

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

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


基于给定评分细则和标准

数据采集

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

    # 读取摄像头一帧图像
    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:

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

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

    # 调用摄像头线程图像保存方法
    camera_th.save_img(num)

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

    pass

数据特征提取

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

    # 生成旋转矩阵,括号内 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>`处填写代码, 读取位于`./src/wuyanzu.png`下的待测图片
# 请在下方`<2>`处填写代码,将`img`转为灰度图
# 请在下方`<3>`处填写代码,绘制矩形框
# 请在下方`<4>`处填写代码,展示出识别后的结果图片