8

I'm trying to add the option to my app to allow for different languages when using Apple's Vision framework for recognising text.

There seems to be a function for programmatically returning the supported languages but I'm not sure if I'm calling it correctly because I'm only getting "en-US" back which I'm fairly sure isn't the only supported language?

Here's what I currently have:

// current revision number of Vision
let revision = VNRecognizeTextRequest.currentRevision
var possibleLanguages: Array<String> = []

do {
    possibleLanguages = try VNRecognizeTextRequest.supportedRecognitionLanguages(for: .accurate, 
                                                                            revision: revision)
} catch {
    print("Error getting the supported languages.")
}

print("Possible languages for revision \(revision):\n(possibleLanguages.joined(separator: "\n"))")

Any help would be much appreciated, thank you.

Andy Jazz
  • 49,178
  • 17
  • 136
  • 220
mralexhay
  • 1,164
  • 1
  • 10
  • 16
  • I think the language has to be added in the device settings. What device of are running this on? Does that device only have English set in its setting? – joehinkle11 Oct 03 '19 at 17:31
  • 1
    Thanks, I like the thought but I’m on a device that is en-GB only. Just tried adding Russian language to my device and it still shows en-US only. – mralexhay Oct 03 '19 at 20:15
  • @mralexhay Did you find any solution for this. I have to add support for other languages as well. – Rashid Oct 15 '19 at 14:58
  • @Rashid I still haven't I'm afraid. Let me know if you come across a solution, thanks! – mralexhay Oct 15 '19 at 17:02

3 Answers3

9

As of iOS 14, VNRecognizeTextRequestRevision2 supports English, French, Italian, German, Spanish, Portuguese, and Chinese (both Simplified and Traditional) in the .accurate recognition level.

["en-US", "fr-FR", "it-IT", "de-DE", "es-ES", "pt-BR", "zh-Hans", "zh-Hant"]

The .fast recognition level supports English, French, Italian, German, Spanish, and Portuguese.

["en-US", "fr-FR", "it-IT", "de-DE", "es-ES", "pt-BR"]

You can check in Playground with this snippet:

try VNRecognizeTextRequest.supportedRecognitionLanguages(for: .fast, revision: 2)
aheze
  • 24,434
  • 8
  • 68
  • 125
Pak
  • 91
  • 1
  • 2
6

iOS 15

In iOS 15 you can call the following instance method that returns the identifiers of the languages that the request (VNRecognizeTextRequest) supports:

func supportedRecognitionLanguages() throws -> [String]

You can use it this way:

print(try! request.supportedRecognitionLanguages())

A. Result (if you use .accurate recognitionLevel):

// ["en-US", "fr-FR", "it-IT", "de-DE", "es-ES", "pt-BR", "zh-Hans", "zh-Hant"]

B. Result (if you use .fast recognitionLevel):

// ["en-US", "fr-FR", "it-IT", "de-DE", "es-ES", "pt-BR"]


recognitionLanguages property

You can easily tell Vision framework which languages are needed for text recognition using recognitionLanguages instance property:

var recognitionLanguages: [String] { get set }

According to Apple documentation: recognitionLanguages defines the order in which languages are used during language processing and text recognition.Specify the languages as ISO language codes.

A real code may look like this:

import Vision

let recognizeTextRequest = VNRecognizeTextRequest()
recognizeTextRequest.minimumTextHeight = 0.05
recognizeTextRequest.recognitionLevel = .accurate

recognizeTextRequest.recognitionLanguages = ["en-US", "fr-FR", "zh-Hans"]

P.S.

In the beginning of 2020, Vision supported only English.

Andy Jazz
  • 49,178
  • 17
  • 136
  • 220
  • 1
    Thanks for you answer, this is what I ended up having but I still couldn’t get any other languages to recognise. I went back and watched the WWDC video about it and there’s one quick moment where they say they only support En-US for the first version. I’m sure they’ll add more with iOS14. – mralexhay Mar 12 '20 at 17:24
  • @mralexhay, you're right, it supports only English at the moment. – Andy Jazz Mar 12 '20 at 18:06
2

For iOS 16 release, this method for checking languages support

print(try! VNRecognizeTextRequest().supportedRecognitionLanguages())

returns the following list of languages:

["en-US", "fr-FR", "it-IT", "de-DE", "es-ES", "pt-BR", "zh-Hans", "zh-Hant", "yue-Hans", "yue-Hant", "ko-KR", "ja-JP", "ru-RU", "uk-UA"]
Denis
  • 3,167
  • 1
  • 22
  • 23