Skip to content

Commit bc7e01e

Browse files
committed
[Refactor] #183 - DefaultImageTransformRepository actor로 변경
1 parent 2bfae04 commit bc7e01e

1 file changed

Lines changed: 19 additions & 20 deletions

File tree

Neki-iOS/Core/Sources/ImageTransform/Data/DefaultImageTransformRepository.swift

Lines changed: 19 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -10,33 +10,32 @@ import Vision
1010
import ComposableArchitecture
1111
import CoreImage
1212

13-
public final class DefaultImageTransformRepository: ImageTransformRepository {
13+
public actor DefaultImageTransformRepository: ImageTransformRepository {
1414

15-
private let modelTask: Task<VNCoreMLModel, Error>
15+
private var cachedModel: VNCoreMLModel?
1616
private let ciContext = CIContext(options: [.cacheIntermediates: false])
1717

18-
public init() {
19-
let config = MLModelConfiguration()
20-
config.computeUnits = .all
18+
public func transform(image inputImage: CGImage) async throws -> CGImage {
2119

22-
self.modelTask = Task {
20+
if self.cachedModel == nil {
21+
let config = MLModelConfiguration()
22+
config.computeUnits = .all
23+
2324
let coreML = try whiteboxcartoonization(configuration: config).model
24-
return try VNCoreMLModel(for: coreML)
25+
self.cachedModel = try VNCoreMLModel(for: coreML)
2526
}
26-
}
27-
28-
public func transform(image inputImage: CGImage) async throws -> CGImage {
29-
let visionModel = try await modelTask.value
3027

31-
return try await Task(priority: .userInitiated) {
32-
let request = VNCoreMLRequest(model: visionModel)
33-
request.imageCropAndScaleOption = .scaleFit
34-
35-
let handler = VNImageRequestHandler(cgImage: inputImage)
36-
try handler.perform([request])
37-
38-
return try self.extractCGImage(from: request.results)
39-
}.value
28+
guard let visionModel = self.cachedModel else {
29+
throw ImageTransformRepositoryError.renderingFailed
30+
}
31+
32+
let request = VNCoreMLRequest(model: visionModel)
33+
request.imageCropAndScaleOption = .scaleFit
34+
35+
let handler = VNImageRequestHandler(cgImage: inputImage)
36+
try handler.perform([request])
37+
38+
return try self.extractCGImage(from: request.results)
4039
}
4140
}
4241

0 commit comments

Comments
 (0)