shape = frames[0].shape[:2]

    results = []
    for anno in tqdm(my_part):
        frames = extract_frame(anno['filename'])
        det_results = detection_inference(det_model, frames)
        # * Get detection results for human
        det_results = [x[0] for x in det_results]
        for i, res in enumerate(det_results):
            # * filter boxes with small scores
            res = res[res[:, 4] >= args.det_score_thr]
            # * filter boxes with small areas
            box_areas = (res[:, 3] - res[:, 1]) * (res[:, 2] - res[:, 0])
            assert np.all(box_areas >= 0)
            res = res[box_areas >= args.det_area_thr]
            det_results[i] = res

        shape = frames[0].shape[:2]
        anno['img_shape'] = shape
        anno = pose_inference(anno, pose_model, frames, det_results, 
                              compress=args.compress)
        anno.pop('filename')
        results.append(anno)

shape = frames[0].shape[:2]
anno['img_shape'] = shape

shape = frames[0].shape[:2] 这段代码涉及到 Python 的列表切片语法。

首先来看 frames[0]frames 是一个列表或者数组,包含了从视频中提取的若干帧。frames[0] 表示获取列表中第一个元素,即第一帧。

接下来是 .shapeframes[0] 表示一个图像或视频帧,它有宽、高和通道数三个属性,这些属性构成了这个图像的形状。.shape 可以获取这个形状信息。

最后是 [:2]。这是 Python 列表切片的语法,用于获取列表的部分元素。[:2] 表示获取从索引 0 到索引 1 (不包括索引 2) 的元素,也就是获取宽和高两个维度的信息,不包括通道数

所以 shape = frames[0].shape[:2] 的作用是:

  1. 获取 frames 列表中的第一个元素,也就是第一帧图像。
  2. 获取这个第一帧图像的形状信息。
  3. 只保留形状中的宽和高两个维度,不包括通道数。
  4. 将这个宽高信息赋值给变量 shape

这样做的目的是为了记录下视频帧的尺寸信息,以便后续的姿态估计处理。

 anno = pose_inference(anno, pose_model, frames, det_results, compress=args.compress)
 anno.pop('filename')
 results.append(anno)

这段代码涉及到了对anno字典的处理:

  1. anno = pose_inference(anno, pose_model, frames, det_results, compress=args.compress)

    • 这一行使用预训练的姿态估计模型pose_model对当前的anno字典、提取的视频帧frames以及目标检测结果det_results进行姿态估计。
    • 估计结果被保存到anno字典中。
    • compress=args.compress表示是否压缩结果。
  2. anno.pop('filename')

    • 这一行从anno字典中移除'filename'键值对。
    • 之前已经提取了视频帧,不再需要'filename'信息了。
  3. results.append(anno)

    • 这一行将更新后的anno字典添加到results列表中。
    • results列表用于保存最终的所有结果。

总结一下这段代码的作用:

  1. 使用姿态估计模型对当前的anno字典进行处理,获得姿态估计结果并更新到anno字典中。
  2. anno字典中移除不再需要的'filename'信息。
  3. 将更新后的anno字典添加到results列表中,以便后续使用。

这个过程是整个计算流程的一个重要步骤,用于将目标检测和姿态估计的结果组织成一个统一的数据结构,以便后续的分析和处理。

pyskl/tools/data/custom_2d_skeleton.py at main · kennymckormick/pyskl · GitHub

下面给出一段代码:class AudioDataset(Dataset): def init(self, train_data): self.train_data = train_data self.n_frames = 128 def pad_zero(self, input, length): input_shape = input.shape if input_shape[0] >= length: return input[:length] if len(input_shape) == 1: return np.append(input, [0] * (length - input_shape[0]), axis=0) if len(input_shape) == 2: return np.append(input, [[0] * input_shape[1]] * (length - input_shape[0]), axis=0) def getitem(self, index): t_r = self.train_data[index] clean_file = t_r[0] noise_file = t_r[1] wav_noise_magnitude, wav_noise_phase = self.extract_fft(noise_file) start_index = len(wav_noise_phase) - self.n_frames + 1 if start_index < 1: start_index = 1 else: start_index = np.random.randint(start_index) sub_noise_magnitude = self.pad_zero(wav_noise_magnitude[start_index:start_index + self.n_frames], self.n_frames) wav_clean_magnitude, wav_clean_phase = self.extract_fft(clean_file) sub_clean_magnitude = self.pad_zero(wav_clean_magnitude[start_index:start_index + self.n_frames], self.n_frames) b_data = {'input_clean_magnitude': sub_clean_magnitude, 'input_noise_magnitude': sub_noise_magnitude} return b_data def extract_fft(self, wav_path): audio_samples = librosa.load(wav_path, sr=16000)[0] stft_result = librosa.stft(audio_samples, n_fft=n_fft, win_length=win_length, hop_length=hop_length, center=True) stft_magnitude = np.abs(stft_result).T stft_phase = np.angle(stft_result).T return stft_magnitude, stft_phase def len(self): return len(self.train_data)。请给出详细注释
05-24
--------------------------------------------------------------------------- ValueError Traceback (most recent call last) Input In [27], in <cell line: 11>() 9 model.add(LSTM(units=32, input_shape=(sequence_length, 4))) 10 model.add(Dropout(0.2)) ---> 11 model.add(LSTM(units=32)) 12 model.add(Dense(units=1, activation='sigmoid')) 14 # 编译模型 File ~/anaconda3/lib/python3.9/site-packages/tensorflow/python/trackable/base.py:204, in no_automatic_dependency_tracking.<locals>._method_wrapper(self, *args, **kwargs) 202 self._self_setattr_tracking = False # pylint: disable=protected-access 203 try: --> 204 result = method(self, *args, **kwargs) 205 finally: 206 self._self_setattr_tracking = previous_value # pylint: disable=protected-access File ~/anaconda3/lib/python3.9/site-packages/keras/src/utils/traceback_utils.py:70, in filter_traceback.<locals>.error_handler(*args, **kwargs) 67 filtered_tb = _process_traceback_frames(e.__traceback__) 68 # To get the full stack trace, call: 69 # `tf.debugging.disable_traceback_filtering()` ---> 70 raise e.with_traceback(filtered_tb) from None 71 finally: 72 del filtered_tb File ~/anaconda3/lib/python3.9/site-packages/keras/src/engine/input_spec.py:235, in assert_input_compatibility(input_spec, inputs, layer_name) 233 ndim = shape.rank 234 if ndim != spec.ndim: --> 235 raise ValueError( 236 f'Input {input_index} of layer "{layer_name}" ' 237 "is incompatible with the layer: " 238 f"expected ndim={spec.ndim}, found ndim={ndim}. " 239 f"Full shape received: {tuple(shape)}" 240 ) 241 if spec.max_ndim is not None: 242 ndim = x.shape.rank ValueError: Input 0 of layer "lstm_8" is incompatible with the layer: expected ndim=3, found ndim=2. Full shape received: (None, 32)
05-25
结合以下代码 import sensor import image import time from pyb import UART import struct # 导入struct模块 typecode ='bi' code = '' sensor.reset() sensor.set_pixformat(sensor.RGB565) sensor.set_framesize(sensor.QQVGA) sensor.skip_frames(time=2000) clock = time.clock() # 初始化UART uart = UART(3, 115200) # 根据实际情况修改UART的端口和波特率 # 定义一个结构体类型和一个结构体变量 class OpenmvDataStruct: def __init__(self, shape, num): self.shape = shape self.num = num data = OpenmvDataStruct('N', 0) # 初始shape为'N',num为0 while True: clock.tick() img = sensor.snapshot().lens_corr(1.8) # 检测圆形 for c in img.find_circles(threshold=3500, x_margin=10, y_margin=10, r_margin=10, r_min=2, r_max=100, r_step=2): img.draw_circle(c.x(), c.y(), c.r(), color=(255, 0, 0)) print('圆形') data.shape = 'C' #标识为C data.num = 1 img = sensor.snapshot() # 检测矩形 for r in img.find_rects(threshold=10000): img.draw_rectangle(r.rect(), color=(255, 0, 0)) for p in r.corners(): img.draw_circle(p[0], p[1], 5, color=(0, 255, 0)) print('矩形') data.shape = 'R' #标识为2 data.num = 2 # 检测三角形 sum_theta = 0 count = 0 for l in img.find_line_segments(merge_distance=10, max_theta_diff=10): img.draw_line(l.line(), color=(255, 0, 0)) sum_theta += l.theta() count += 1 avg_theta = sum_theta / count if count > 0 else 0 if 1 < avg_theta < 75: print('三角形') data.shape = 'T' #标识为T data.num = 3 print("FPS %f" % clock.fps()) # 将结构体变量data打包成字节流,并发送给Arduino # 打包data为字节流 packed_data = struct.pack(typecode, ord(data.shape), data.num) print(ord(data.shape)) uart.write(packed_data) # 发送数据
最新发布
07-17
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值