Я использовал приведенный ниже код для преобразования iOS CMSampleBufferRef в dlib :: array2d:
- (void)inputImageFromSampleBuffer:(CMSampleBufferRef)sampleBuffer
{
CVImageBufferRef imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer);
CVPixelBufferLockBaseAddress(imageBuffer, kCVPixelBufferLock_ReadOnly);
size_t width = CVPixelBufferGetWidth(imageBuffer);
size_t height = CVPixelBufferGetHeight(imageBuffer);
char *baseBuffer = (char *)CVPixelBufferGetBaseAddress(imageBuffer);
if (inputImage.nr() != height) {
inputImage.set_size(height, width);
}
inputImage.reset();
long position = 0;
while (inputImage.move_next()) {
dlib::bgr_pixel& pixel = inputImage.element();
long bufferLocation = position * 4;
char r = baseBuffer[bufferLocation];
char g = baseBuffer[bufferLocation + 1];
char b = baseBuffer[bufferLocation + 2];
dlib::bgr_pixel newpixel(b, g, r);
pixel = newpixel;
position++;
}
CVPixelBufferUnlockBaseAddress(imageBuffer, kCVPixelBufferLock_ReadOnly);
}
Я сделал это для каждого кадра от делегата - (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection
, Время обработки этой задачи составляло около 10 мс (запуск на Iphone 5S), что слишком медленно для моей потребности. Есть ли способ ускорить эту задачу?
Задача ещё не решена.
Других решений пока нет …