d6aeede2bc
从桌面工程复制而来,作为本仓库的 Xuxucheck/ 子目录。 为控制仓库体积做了两处删减: - 移除 Frameworks/opencv2.xcframework 下的两个 visionOS 切片 (xros-arm64、xros-arm64-simulator,合计约 106 MB),并同步删掉该 xcframework 内 Info.plist 里对应的两条 AvailableLibraries 记录, 只保留 ios-arm64 与 ios-arm64_x86_64-simulator。 - 移除全部 .DS_Store 与 xcuserdata/。 已用 xcodebuild 从本目录完整编译验证:BUILD SUCCEEDED, ProcessXCFramework 以 --platform ios 成功选中框架,产物含 3699 个 cv:: 符号 (OpenCV 确实链入),嵌入 framework 3 个,与移除无用 pod 之后的状态一致。 仓库约 206 MB,其中 OpenCV 203 MB、其余源码与依赖约 3 MB。
93 lines
2.0 KiB
Swift
93 lines
2.0 KiB
Swift
//
|
|
// CameraViewModel.swift
|
|
// XuXuCheck
|
|
//
|
|
// Created by henseycai on 2025/6/25.
|
|
//
|
|
|
|
import Foundation
|
|
import CoreImage
|
|
|
|
@Observable
|
|
class CameraViewModel {
|
|
|
|
var currentFrame: CGImage?
|
|
var array3D: [[[Double]]] = []
|
|
var arrayPaperDesc: [Int] = [0,0,0,0]
|
|
var isSuccess: Bool = false
|
|
var isDataSent: Bool = false
|
|
|
|
var recordId: Int = 0
|
|
var recordResultModel: RecordResultModel? = nil
|
|
|
|
var xuxuError:XuXuRespError? = nil
|
|
var isNeedPopErr = false
|
|
|
|
private let cameraManager = CameraManager()
|
|
|
|
init() {
|
|
Task {
|
|
await handleCameraPreviews()
|
|
}
|
|
}
|
|
|
|
private func resetData(){
|
|
recordId = 0
|
|
isSuccess = false
|
|
isDataSent = false
|
|
isNeedPopErr = false
|
|
array3D = []
|
|
}
|
|
|
|
func startSession(){
|
|
//init data
|
|
resetData()
|
|
|
|
cameraManager.StartCapture()
|
|
}
|
|
|
|
func stopSession(){
|
|
cameraManager.StopCapture()
|
|
}
|
|
|
|
func handleCameraPreviews() async {
|
|
for await image in cameraManager.previewStream {
|
|
Task { @MainActor in
|
|
currentFrame = image
|
|
}
|
|
}
|
|
}
|
|
|
|
func recordDetailUrl() -> String{
|
|
|
|
let res = API.webrecordDetailUrl + GetGeneralRequestParams() + "&record_type=0&record_id=\(recordId)"
|
|
return res
|
|
}
|
|
|
|
func addRecord(desc: [Int]){
|
|
self.isDataSent = true
|
|
APIService.instance.addNewRecord(with: desc, with: array3D, completion: {(model,error) in
|
|
// debugPrint(desc[0])
|
|
// debugPrint(desc[1])
|
|
// debugPrint(desc[2])
|
|
|
|
if let error = error{
|
|
debugPrint(error)
|
|
|
|
self.xuxuError = error
|
|
self.isNeedPopErr = true
|
|
|
|
return
|
|
}
|
|
self.recordResultModel = model
|
|
self.recordId = model?.data?.record_id ?? 0
|
|
self.isSuccess = true
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|