ライブビデオストリームでリアルタイムの画像分析を行っています。vImage を使用してヒストグラムを計算し、さらに処理するために vDSP を使用しています。何年にもわたってうまく機能しているObjective-Cコードがあります。私は今それをSwiftに変換しようとしています。そして、それが機能している間は遅すぎます。主な問題は、UInt (vImagePixelCount) である vImage ヒストグラムを、vDSP が処理できる Float に変換することであることがわかりました。Objective-C では、vDSP を使用して変換を行っています。
err = vImageHistogramCalculation_Planar8(&vBuffY,histogramY, 0);
vDSP_vfltu32((const unsigned int*)histogramY,2,histFloatY,1,256);
ただし、vImage ヒストグラムは UInt32 ではなく UInt であるため、Swift では vDSP_vfltu32 を使用できません。代わりに私は使用しています
let err = vImageHistogramCalculation_Planar8(&vBuffY, &histogramY, 0)
let histFloatY = histogramY.compactMap{ Float($0) }
問題は、このコードが Objective-C バージョンよりも 100 倍以上遅いことです。より高速な代替手段はありますか?