WeScan相机自动对焦或选择相机Swift

xa9qqrwz  于 5个月前  发布在  Swift
关注(0)|答案(1)|浏览(106)

我已经在Swift中使用WeScan git repo做了一个成分扫描应用程序,因为我一次只想扫描一张图片,并在尝试使用原生库时发现了问题。
https://github.com/WeTransfer/WeScan/
一切都是完整的,但我是在一个只有一个后置摄像头的老iPhone上测试。在iPhone 15上测试后,我意识到后置摄像头不是自动对焦的,我看不到在图书馆里在哪里定义使用哪个摄像头(它需要最近的视觉一个扫描小文字)或如何使它自动对焦(例如,就像在原生相机应用程序中,你点击自动对焦,它就会切换到适当的相机)。
我一直在摆弄ImageScannerController和CameraScannerViewController,试图找到一个autoFocus或selectCamera方法,但都无济于事。

func scanFromCamera() {
    let scannerViewController = ImageScannerController()
    scannerViewController.imageScannerDelegate = self
    scannerViewController.modalPresentationStyle = .popover
    scannerViewController.navigationBar.backgroundColor = .black
    scannerViewController.navigationBar.tintColor = .white
    scannerViewController.toolbar.backgroundColor = .black
    present(scannerViewController, animated: true)
    
}

 private func configureOCR() {
    ocrRequest = VNRecognizeTextRequest { (request, error) in
        guard let observations = request.results as? [VNRecognizedTextObservation] else { return }
        
        var ocrText = ""
        for observation in observations {
            guard let topCandidate = observation.topCandidates(1).first else { return }
            
            ocrText += topCandidate.string + "\n"
        }
        
        DispatchQueue.main.async {
            self.scannedIngedients = ocrText;
            self.performSegue(withIdentifier: "ScanResults", sender: self)
        }
    }
    
    ocrRequest.recognitionLevel = .accurate
    ocrRequest.recognitionLanguages = ["en-US", "en-GB", "en-AU"]
    ocrRequest.usesLanguageCorrection = true
}

private func processImage(_ image: UIImage) {
    guard let cgImage = image.cgImage else { return }
    
    let requestHandler = VNImageRequestHandler(cgImage: cgImage, options: [:])
    do {
        try requestHandler.perform([self.ocrRequest])
    } catch {
        print(error)
    }
}

@objc func openCamera(sender: Any) {
    scanFromCamera()
}

字符串
非常感谢

vdzxcuhz

vdzxcuhz1#

我已经修复了它,把这个在这里为其他谁有同样的问题或希望贡献者可能会添加这作为一个功能的应用程序选择使用哪一个透镜。
1.我下载了一个git的本地副本
1.在Xcode中,我从git中删除了对包的依赖(点击主蓝色项目图标,包依赖,WeScan,然后点击-)
1.添加了基于本地副本的包依赖性(所以我可以改变包的文件)- XCode,文件,添加包依赖性,单击添加本地按钮,浏览本地副本并添加
1.以下4个文件是我发现代码选择AVCaptureDevice的地方(在Scan和Session文件夹中):CameraScannerViewController,CaptureSessionManager,ScannerViewController,CaptureSession
1.搜索AVCaptureDevice并将以下内容替换为CameraScannerViewController和ScannerViewController:guard let device = AVCaptureDevice.default(用于:AVMediaType.video):
let discoverySession = AVCaptureDevice.DiscoverySession(deviceTypes:[.builtInTripleCamera,. builtInDualWideCamera,.builtInDualCamera,. builtInWideAngleCamera],mediaType:.video,position:.back)let selectedDevice = discoverySession.devices.first guard let device = selectedDevice else { return }
1.将此添加到CaptureSession:

let discoverySession = AVCaptureDevice.DiscoverySession(deviceTypes: [.builtInTripleCamera, .builtInDualWideCamera, .builtInDualCamera, .builtInWideAngleCamera], mediaType: .video, position: .back)

字符串
let selectedDevice = discoverySession.devices.first self.device = selectedDevice
1.然后将其添加到CaptureSessionManager:
let discoverySession = AVCaptureDevice.DiscoverySession(deviceTypes:[.builtInTripleCamera,. builtInDualWideCamera,.builtInDualCamera,.builtInWideAngleCamera],mediaType:.video,position:.back)
let selectedDevice = discoverySession.devices.first guard let device = selectedDevice else { let error = ImageScannerControllerError.inputDevice delegate?.captureSessionManager(self,didFailWithError:error)return nil }
我发现一些有用的链接:
https://teng.pub/technical/2022/6/9/let-ios-decide-the-best-lens-to-usehttps://developer.apple.com/documentation/avfoundation/capture_setup/choosing_a_capture_device

相关问题