gpt4 book ai didi

Swift Combine : One publisher consumes another, 如何让两个流都退出

转载 作者:行者123 更新时间:2023-11-28 07:19:07 25 4
gpt4 key购买 nike

我需要一些帮助来理解为什么我的发布者不通过 combineLatest 运算符发布元素。我有一个发布视频帧的发布者,另一个发布者使用这些视频帧并从这些帧中提取人脸。我现在正在尝试使用 combineLatest 将原始视频帧和转换后的输出合并为一个(我正在使用一些自定义发布者来提取视频帧并转换帧):

let videoPublisher = VideoPublisher //Custom Publisher that outputs CVImageBuffers
.share()

let faceDetectionPublisher = videoPublisher
.detectFaces() // Custom Publisher/subscriber that takes in video frames and outputs an array of VNFaceObservations

let featurePublisher = videoPublisher.combineLatest(faceDetectionPublisher)
.sink(receiveCompletion:{_ in
print("done")
}, receiveValue: { (video, faces) in
print("video", video)
print("faces", faces)
})

但是,我没有从 combineLatest 中获得任何事件。经过一些调试后,我认为问题是来自 videoPublisher 的所有 videoFrames 在任何可以成功流过 faceDetectionPublisher 之前发布。如果我将打印语句附加到 videoPublisher 和 faceDetectionPublisher 的末尾,我可以看到前者的输出,但后者看不到输出。我已经阅读了 combine 和其他技术(例如多播),但还没有找到可行的解决方案。我喜欢任何关于如何更好地理解框架的综合专业知识或指导!

最佳答案

您的 combineLatest 不会发出任何东西,直到它的每个源发出至少一个值。由于 detectFaces() 从不发射,您的链正在停滞。您的 detectFaces() 运算符有问题,或者可能没有要检测的面孔,在这种情况下您的逻辑已关闭。

如果是后一种情况,则在 detectFaces() 的结果上使用 prepend 为管道播种一些默认值(可能是一个空数组?)

关于Swift Combine : One publisher consumes another, 如何让两个流都退出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58667963/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com