في iOS18 شركة Apple دعمت اللغة العربية في Live Text
والجميل ايضاً بأنها دعمت اللغة العربية ايضا في الـ VNRecognizeTextRequest
من تجربتي النتائج كانت دقيقة جداً مع مختلف النصوص ولكن بالنسبة للخط اليد فالنتائج كانت متفاوته
import Vision
func ocr(image: UIImage?) -> String {
var text: String = ""
guard let image = image else {
print("Failed to load image")
return ""
}
guard let cgImage = image.cgImage else {
print("Failed to get CGImage from UIImage")
return ""
}
let handler = VNImageRequestHandler(cgImage: cgImage, options: [:])
let recognizeRequest = VNRecognizeTextRequest { (request, error) in
if let error = error {
print("Failed to recognize text: \(error.localizedDescription)")
return
}
guard let results = request.results as? [VNRecognizedTextObservation] else {
print("No text found")
return
}
let stringArray = results.compactMap { result in
result.topCandidates(1).first?.string
}
let recognizedString = stringArray.joined(separator: "\n")
let singleLineText = recognizedString
.components(separatedBy: .newlines)
.joined(separator: " ")
text = singleLineText
}
recognizeRequest.automaticallyDetectsLanguage = true
recognizeRequest.recognitionLevel = .accurate
do {
try handler.perform([recognizeRequest])
} catch {
print("Failed to perform text recognition: \(error.localizedDescription)")
}
return text
}
شرح الكود
لإستخراج النص نحتاج نضيف import Vision
ومن ثم استخدام VNRecognizeTextRequest لإستخراج النص من الصوره OCR
الخطوات المهمه هنا هيا اضافة هذا السطر
recognizeRequest.automaticallyDetectsLanguage = true
فائدته هو السماح للـ Vision لتحديد اللغة بشكل تلقائي ، تم اضافته في iOS16
سابقاً كان يجب تحدد اللغة التي تريد استخراج النص منها ولكن من iOS16 فقط تحتاج اضافة السطر السابق
السطر الأخر الذي يجب إضافته هو
recognizeRequest.recognitionLevel = .accurate
الـ recognitionLevel هناك نوعين fast او accurate
مع اللغة العربية يجب اختيار نوع accurate
فيديو يوضح دقة نتائج الـ OCR مع اللغة العربية
