diff --git a/apps/worker/video_processing/dedup.py b/apps/worker/video_processing/dedup.py old mode 100644 new mode 100755 index 9e7a992d3..a0f98528b --- a/apps/worker/video_processing/dedup.py +++ b/apps/worker/video_processing/dedup.py @@ -93,12 +93,18 @@ class VideoFingerprint: resolution: tuple[int, int] def to_dict(self) -> dict: + # 注意:color_histograms 里的值可能是 np.float32(来自 cv2.normalize), + # 直接存进 dict 后 SQLAlchemy JSON 序列化会报 "float32 is not JSON serializable"。 + # 这里统一转成 Python 原生 float。 + native_histograms = [ + [float(v) for v in hist] for hist in self.color_histograms + ] return { "md5": self.md5, "keyframe_phashes": self.keyframe_phashes, - "color_histograms": self.color_histograms, - "duration": self.duration, - "resolution": list(self.resolution), + "color_histograms": native_histograms, + "duration": float(self.duration), + "resolution": [int(self.resolution[0]), int(self.resolution[1])], }