基于机器视觉的数字1-10手势识别系统( 二 )


这个程序文件名为.py,主要功能是将指定文件夹中的视频文件转换成帧,并计算每个视频文件的帧数 。具体的代码如下:
导入所需的库:cv2用于处理视频文件,os用于操作文件和文件夹路径,用于判断文件夹是否存在 。定义一个空列表hc用于存储视频文件的帧数 。定义一个函数,参数为,用于处理指定文件夹中的视频文件 。初始化变量和count,分别用于存储帧数和计数 。获取当前工作目录的路径,并创建一个名为的文件夹 。将的路径设置为当前工作目录,并获取该文件夹下的所有文件和文件夹的名称 。遍历每个手势文件夹 。将手势文件夹的路径设置为当前工作目录,并创建一个名为的文件夹 。获取当前文件夹下的所有视频文件,并将其存储在列表中 。遍历每个视频文件 。计数器count加1 。获取视频文件的绝对路径,并打开该视频文件 。获取视频文件的帧数,并将其存储在变量中 。将帧数和视频文件名添加到列表中 。释放视频文件的资源,并关闭所有窗口 。返回到手势文件夹的上一级目录 。返回到根目录 。根据帧数对列表进行降序排序 。打开一个名为out.txt的文件,以二进制写入模式 。遍历列表中的每个元素,将帧数和视频文件名以字符串的形式写入文件中 。关闭文件 。
最后,调用函数,参数为"test/",即处理名为"test"的文件夹中的视频文件 。
5.2 .py
class HandSegmentation:def __init__(self):self.boundaries = [([0, 120, 0], [140, 255, 100]),([25, 0, 75], [180, 38, 255])]def segment(self, frame):lower, upper = self.boundaries[0]lower = np.array(lower, dtype="uint8")upper = np.array(upper, dtype="uint8")mask1 = cv2.inRange(frame, lower, upper)lower, upper = self.boundaries[1]lower = np.array(lower, dtype="uint8")upper = np.array(upper, dtype="uint8")mask2 = cv2.inRange(frame, lower, upper)mask = cv2.bitwise_or(mask1, mask2)output = cv2.bitwise_and(frame, frame, mask=mask)return outputif __name__ == '__main__':hand_segmentation = HandSegmentation()frame = cv2.imread("test.jpeg")hand_segmentation.segment(frame)
这个程序文件名为.py,主要功能是对输入的图像进行手部分割 。程序使用了库和NumPy库 。
程序首先定义了一个列表,其中包含了两个颜色范围 。这些颜色范围用于识别手部的颜色 。
然后定义了一个函数,该函数接受一个图像帧作为输入 。函数首先使用第一个颜色范围来创建一个掩膜mask1,然后使用第二个颜色范围创建一个掩膜mask2 。接下来,使用位运算符将两个掩膜合并为一个掩膜mask 。最后,使用位与运算符将原始图像帧和掩膜mask进行合并,得到输出图像 。
在程序的主函数中,读取了一个名为test.jpeg的图像,并将其作为参数传递给函数 。
【基于机器视觉的数字1-10手势识别系统】程序的注释部分是一种替代的实现方式,使用了循环来处理列表中的每个颜色范围,但是该部分被注释掉了 。
整体来说,这个程序文件实现了手部分割的功能,可以根据颜色范围来识别图像中的手部,并将手部区域提取出来 。
5.3 hog.py
class HOGFeatureExtractor:def __init__(self, orientations=10, pixels_per_cell=[12, 12], cells_per_block=[4, 4]):self.orientations = orientationsself.pixels_per_cell = pixels_per_cellself.cells_per_block = cells_per_blockdef get_hog_skimage(self, img, visualize=False):features = ft.hog(img, orientations=self.orientations, pixels_per_cell=self.pixels_per_cell, cells_per_block=self.cells_per_block, visualize=visualize, transform_sqrt=True)return featuresdef build_hog_data(self, folder_path):train_data = http://www.kingceram.com/post/[]test_data = []for filename in tqdm(os.listdir(folder_path)):img = cv2.imread(folder_path +"\\" + filename, 0)img_hog = self.get_hog_skimage(img)if filename.find('train') != -1:train_data.append(img_hog)else:test_data.append(img_hog)train_data = http://www.kingceram.com/post/np.array(train_data)test_data = np.array(test_data)return train_data, test_data