рдЕрдм рд╡рд┐рдЬрд╝рди рдлреНрд░реЗрдорд╡рд░реНрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХреЗ рд▓рд┐рдП рдЯреЗрдХреНрд╕реНрдЯ рдХреЛ рдкрд╣рдЪрд╛рдирдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИ, рдФрд░ рдкрд╣рд▓реЗ рдХреА рддрд░рд╣ рдирд╣реАрдВред рд╣рдо рдЖрдЧреЗ рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдХрдм рд╣рдо рдЗрд╕реЗ рдбреЛрдбреЛ рдЖрдИрдПрд╕ рдкрд░ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рдмреАрдЪ, рдмреЛрд░реНрдб рдЧреЗрдо рдореИрдЬрд┐рдХ рдж рдЧреИрджрд░рд┐рдВрдЧ рд╕реЗ рдХрд╛рд░реНрдб рдХреЛ рдкрд╣рдЪрд╛рдирдиреЗ рдФрд░ рдЙрдирд╕реЗ рдкрд╛рдареНрдп рд╕реВрдЪрдирд╛ рдирд┐рдХрд╛рд▓рдиреЗ рдкрд░ рдПрдХ рд▓реЗрдЦ рдХрд╛ рдЕрдиреБрд╡рд╛рджред

рд╡рд┐рдЬрди рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЛ рдкрд╣рд▓реА рдмрд╛рд░ 2017 рдореЗрдВ WWDC рдореЗрдВ iOS 11 рдХреЗ рд╕рд╛рде рдЖрдо рдЬрдирддрд╛ рдХреЗ рд▓рд┐рдП рдкреЗрд╢ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рд╡рд┐рдЬрд╝рд┐рдЯрд░ рдХреЛ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕, рдХреНрд╖реИрддрд┐рдЬ рд╡рд┐рдорд╛рдиреЛрдВ, рдмрд╛рд░рдХреЛрдб, рдЪреЗрд╣рд░реЗ рдХреЗ рднрд╛рд╡ рдФрд░ рдкрд╛рда рдХреЛ рд╡рд░реНрдЧреАрдХреГрдд рдХрд░рдиреЗ рдФрд░ рдкрд╣рдЪрд╛рдирдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЯреЗрдХреНрд╕реНрдЯ рд░рд┐рдХрдЧреНрдирд┐рд╢рди рдореЗрдВ рдПрдХ рд╕рдорд╕реНрдпрд╛ рдереА: рд╡рд┐рдЬрд╝рди рдЙрд╕ рдЬрдЧрд╣ рдХреЛ рдЦреЛрдЬ рд╕рдХрддрд╛ рд╣реИ рдЬрд╣рд╛рдБ рдЯреЗрдХреНрд╕реНрдЯ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЯреЗрдХреНрд╕реНрдЯ рд░рд┐рдХрдЧреНрдирд┐рд╢рди рдирд╣реАрдВ рдерд╛ред рдмреЗрд╢рдХ, рд╡реНрдпрдХреНрддрд┐рдЧрдд рдкрд╛рда рдЕрдВрд╢реЛрдВ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдмрд╛рдЙрдВрдбрд┐рдВрдЧ рдмреЙрдХреНрд╕ рдХреЛ рджреЗрдЦрдирд╛ рдЕрдЪреНрдЫрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдлрд┐рд░ рдЙрдиреНрд╣реЗрдВ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд╛рд▓рдирд╛ рдФрд░ рдкрд╣рдЪрд╛рдирдирд╛ рдкрдбрд╝рд╛ред
рдпрд╣ рд╕рдорд╕реНрдпрд╛ рд╡рд┐рдЬрд╝рди рдЕрдкрдбреЗрдЯ рдореЗрдВ рд╣рд▓ рдХреА рдЧрдИ рдереА, рдЬрд┐рд╕реЗ iOS 13. рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЕрдм рд╡рд┐рдЬрд╝рди рдлреНрд░реЗрдорд╡рд░реНрдХ рд╕рд╣реА рдЯреЗрдХреНрд╕реНрдЯ рдкрд╣рдЪрд╛рди рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдпрд╛ рдЬреЛ рдмреЛрд░реНрдб рдЧреЗрдо рдореИрдЬрд┐рдХ рдж рдЧреИрджрд░рд┐рдВрдЧ рд╕реЗ рдПрдХ рдХрд╛рд░реНрдб рдХреЛ рдкрд╣рдЪрд╛рди рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рд╕реЗ рдЯреЗрдХреНрд╕реНрдЯ рдЬрд╛рдирдХрд╛рд░реА рдирд┐рдХрд╛рд▓ рд╕рдХрддрд╛ рд╣реИ:
- рдХрд╛рд░реНрдб рдХрд╛ рдирд╛рдо;
- рд░рд┐рд▓реАрдЬрд╝ рдХреЛрдб;
- рд╕рдВрдЧреНрд░рд╣ рд╕рдВрдЦреНрдпрд╛ (рдЙрд░реНрдл рдЬрд╝рд┐рдк рдХреЛрдб)ред
рдпрд╣рд╛рдВ рдПрдХ рдорд╛рдирдЪрд┐рддреНрд░ рдФрд░ рдЪрдпрдирд┐рдд рдкрд╛рда рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред

рдХрд╛рд░реНрдб рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдЖрдк рд╕реЛрдЪ рд╕рдХрддреЗ рд╣реИрдВ: "рдпрд╣ рдкрд╛рда рдмрд▓реНрдХрд┐ рдЫреЛрдЯрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рдХрд╛рд░реНрдб рдкрд░ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЕрдиреНрдп рдкрд╛рда рд╣реИрдВ рдЬреЛ рд╣рд╕реНрддрдХреНрд╖реЗрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред" рд▓реЗрдХрд┐рди рд╡рд┐рдЬрди рдХреЗ рд▓рд┐рдП, рдпрд╣ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИред
рдкрд╣рд▓реЗ рд╣рдореЗрдВ рдПрдХ
VNRecognizeTextRequest
рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдпрд╣ рдЗрд╕ рдмрд╛рдд рдХрд╛ рд╡рд░реНрдгрди рд╣реИ рдХрд┐ рд╣рдо рдХреНрдпрд╛ рдкрд╣рдЪрд╛рдирдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реИрдВ, рд╕рд╛рде рд╣реА рдПрдХ рдорд╛рдиреНрдпрддрд╛ рднрд╛рд╖рд╛ рд╕реЗрдЯрд┐рдВрдЧ рдФрд░ рд╕рдЯреАрдХрддрд╛ рдХрд╛ рд╕реНрддрд░:
let request = VNRecognizeTextRequest(completionHandler: self.handleDetectedText) request.recognitionLevel = .accurate request.recognitionLanguages = ["en_GB"]
рдкреВрд░рд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдмреНрд▓реЙрдХ рдореЗрдВ
handleDetectedText(request: VNRequest?, error: Error?)
ред рд╣рдо рдЗрд╕реЗ
VNRecognizeTextRequest
рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЛ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рд╢реЗрд╖ рдЧреБрдг рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВред
рдорд╛рдиреНрдпрддрд╛ рд╕рдЯреАрдХрддрд╛ рдХреЗ рджреЛ рд╕реНрддрд░ рдЙрдкрд▓рдмреНрдз рд╣реИрдВ:
.fast
ред рдЪреВрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдб рдореЗрдВ рд╕рдмрд╕реЗ рдиреАрдЪреЗ рдПрдХ рдЫреЛрдЯрд╛ рдкрд╛рда рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЙрдЪреНрдЪ рд╕рдЯреАрдХрддрд╛ рдХреЛ рдЪреБрдирд╛ред рддреЗрдЬ рд╡рд┐рдХрд▓реНрдк рд╢рд╛рдпрдж рдкрд╛рда рдХреЗ рдмрдбрд╝реЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рдЕрдиреБрдХреВрд▓ рд╣реИред
рдореИрдВрдиреЗ рдмреНрд░рд┐рдЯрд┐рд╢ рдЕрдВрдЧреНрд░реЗрдЬреА рдХреЛ рд╕реАрдорд┐рдд рдорд╛рдиреНрдпрддрд╛ рджреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдореЗрд░реЗ рд╕рднреА рдХрд╛рд░реНрдб рдЗрд╕рдореЗрдВ рд╣реИрдВред рдЖрдк рдХрдИ рднрд╛рд╖рд╛рдУрдВ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдпрд╣ рд╕рдордЭрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рд╕реНрдХреИрдирд┐рдВрдЧ рдФрд░ рдорд╛рдиреНрдпрддрд╛ рдкреНрд░рддреНрдпреЗрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рднрд╛рд╖рд╛ рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝реА рдЕрдзрд┐рдХ рд╕рдордп рд▓реЗ рд╕рдХрддреА рд╣реИред
рдЙрд▓реНрд▓реЗрдЦ рдХреЗ рд▓рд╛рдпрдХ рджреЛ рдФрд░ рдЧреБрдг рд╣реИрдВ:
customWords
: рдЖрдк рдмрд┐рд▓реНрдЯ-рдЗрди рд▓реЗрдХреНрд╕рд┐рдХреЙрди рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреА рдПрдХ рд╕рд░рдгреА рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рда рдореЗрдВ рдХреЛрдИ рдЕрд╕рд╛рдорд╛рдиреНрдп рд╢рдмреНрдж рд╣реИрдВ рддреЛ рдпрд╣ рдЙрдкрдпреЛрдЧреА рд╣реИред рдореИрдВрдиреЗ рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдореИрдВ рдХрдорд░реНрд╢рд┐рдпрд▓ рдореИрдЬрд┐рдХ рдж рдЧреИрджрд░рд┐рдВрдЧ рдХрд╛рд░реНрдб рд░рд┐рдХрдЧреНрдирд┐рд╢рди рдПрдкреНрд▓реАрдХреЗрд╢рди рдмрдирд╛рдиреЗ рд╡рд╛рд▓рд╛ рд╣реЛрддрд╛, рддреЛ рдореИрдВ рд╕рдорд╕реНрдпрд╛рдУрдВ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╕рдмрд╕реЗ рдЬрдЯрд┐рд▓ рдХрд╛рд░реНрдбреНрд╕ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдлрдмреНрд▓реНрдердк, рдж рд▓реЙрд╕реНрдЯ ) рдХреЛ рдЬреЛрдбрд╝ рджреЗрддрд╛ редminimumTextHeight
: рдпрд╣ рдПрдХ рдлреНрд▓реЛрдЯ рдореВрд▓реНрдп рд╣реИред рдпрд╣ рдЙрд╕ рдЫрд╡рд┐ рдХреА рдКрдВрдЪрд╛рдИ рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рдЖрдХрд╛рд░ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕ рдкрд░ рдкрд╛рда рдХреЛ рдЕрдм рдкрд╣рдЪрд╛рдирд╛ рдирд╣реАрдВ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЕрдЧрд░ рдореИрдВрдиреЗ рдпрд╣ рд╕реНрдХреИрдирд░ рд╕рд┐рд░реНрдл рдирдХреНрд╢реЗ рдХрд╛ рдирд╛рдо рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рд╣реИ, рддреЛ рдЕрдиреНрдп рд╕рднреА рдкрд╛рдареЛрдВ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ рдЬрд┐рдирдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдкрд╛рда рдХреЗ рд╕рдмрд╕реЗ рдЫреЛрдЯреЗ рдЯреБрдХрдбрд╝реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЕрднреА рддрдХ рдореИрдВрдиреЗ рдЗрд╕ рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд┐рдпрд╛ рд╣реИред рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдпрджрд┐ рдЖрдк рдЫреЛрдЯреЗ рдЧреНрд░рдВрдереЛрдВ рдХреЛ рдирдЬрд░рдЕрдВрджрд╛рдЬ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдорд╛рдиреНрдпрддрд╛ рдХреА рдЧрддрд┐ рдЕрдзрд┐рдХ рд╣реЛрдЧреАред
рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣рдорд╛рд░рд╛ рдЕрдиреБрд░реЛрдз рд╣реИ, рд╣рдореЗрдВ рдЗрд╕реЗ рдЪрд┐рддреНрд░ рдХреЗ рд╕рд╛рде рдЕрдиреБрд░реЛрдзрдХрд░реНрддрд╛ рдХреЗ рдкрд╛рд╕ рднреЗрдЬрдирд╛ рдЪрд╛рд╣рд┐рдП:
let requests = [textDetectionRequest] let imageRequestHandler = VNImageRequestHandler(cgImage: cgImage, orientation: .right, options: [:]) DispatchQueue.global(qos: .userInitiated).async { do { try imageRequestHandler.perform(requests) } catch let error { print("Error: \(error)") } }
рдореИрдВ рдХреИрдорд░реЗ рд╕реЗ рд╕реАрдзреЗ рдЫрд╡рд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рдЗрд╕реЗ
UIImage
рд╕реЗ
CGImage
рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛
CGImage
ред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ
VNImageRequestHandler
рдореЗрдВ рдУрд░рд┐рдПрдВрдЯреЗрд╢рди рдлреНрд▓реИрдЧ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рд╣реИрдВрдбрд▓рд░ рдХреЛ рдпрд╣ рд╕рдордЭрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдЙрд╕реЗ рдХрд┐рд╕ рдЯреЗрдХреНрд╕реНрдЯ рдХреЛ рдкрд╣рдЪрд╛рдирдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЗрд╕ рдбреЗрдореЛ рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВ рдлреЛрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рдкреЛрд░реНрдЯреНрд░реЗрдЯ рдУрд░рд┐рдПрдВрдЯреЗрд╢рди рдореЗрдВ рдХрд░рддрд╛ рд╣реВрдВред рдЗрд╕рд▓рд┐рдП рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рдореИрдВ рдЕрднрд┐рд╡рд┐рдиреНрдпрд╛рд╕
.right
ред рдЕрддрдГ рд╣реЗ рдкрджреНрдЬреА!
рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдХреИрдорд░реЗ рдХрд╛ рдУрд░рд┐рдПрдВрдЯреЗрд╢рди рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рд░реЛрдЯреЗрд╢рди рд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рд╣реИ рдФрд░ рд╣рдореЗрд╢рд╛ рдмрд╛рдИрдВ рдУрд░ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЬреИрд╕рд╛ рдХрд┐ 2009 рдореЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдерд╛, рдлреЛрдЯреЛ рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдлреЛрди рдХреЛ рд▓реИрдВрдбрд╕реНрдХреЗрдк рдУрд░рд┐рдПрдВрдЯреЗрд╢рди рдореЗрдВ рд░рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ)ред рдмреЗрд╢рдХ, рд╕рдордп рдмрджрд▓ рдЧрдпрд╛ рд╣реИ, рдФрд░ рд╣рдо рдореВрд▓ рд░реВрдк рд╕реЗ рдЪрд┐рддреНрд░ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдлрд╝реЛрдЯреЛ рдФрд░ рд╡реАрдбрд┐рдпреЛ рд╢реВрдЯ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХреИрдорд░рд╛ рдЕрднреА рднреА рдмрд╛рдИрдВ рдУрд░ рд╕рдВрд░реЗрдЦрд┐рдд рд╣реИред
рдЬреИрд╕реЗ рд╣реА рд╣рдорд╛рд░реЗ рд╣реИрдВрдбрд▓рд░ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╣рдо рдкреНрд░рд╛рдердорд┐рдХрддрд╛
.userInitiated
рд╕рд╛рде рд╕реНрдЯреНрд░реАрдо рдореЗрдВ
.userInitiated
рдФрд░ рд╣рдорд╛рд░реЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдкреНрд░рд╢реНрдиреЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рд╣реИред рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реЛрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдПрдХ рдкрд╛рд╕ рдореЗрдВ рдбреЗрдЯрд╛ рдХреЗ рдХрдИ рдЯреБрдХрдбрд╝реЗ рдирд┐рдХрд╛рд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдпрд╛рдиреА, рдПрдХ рд╣реА рдЫрд╡рд┐ рд╕реЗ рдЪреЗрд╣рд░реЗ рдФрд░ рдкрд╛рда рдХреА рдкрд╣рдЪрд╛рди рдХрд░рдирд╛)ред рдпрджрд┐ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рд╣реИ, рддреЛ рдкрд╛рда рдХрд╛ рдкрддрд╛ рдЪрд▓рдиреЗ рдХреЗ рдмрд╛рдж рд╣рдорд╛рд░реЗ рдЕрдиреБрд░реЛрдз рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рдИ рдЧрдИ рдХреЙрд▓рдмреИрдХ рдХреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:
func handleDetectedText(request: VNRequest?, error: Error?) { if let error = error { print("ERROR: \(error)") return } guard let results = request?.results, results.count > 0 else { print("No text found") return } for result in results { if let observation = result as? VNRecognizedTextObservation { for text in observation.topCandidates(1) { print(text.string) print(text.confidence) print(observation.boundingBox) print("\n") } } } }
рд╣рдорд╛рд░рд╛ рд╣реИрдВрдбрд▓рд░ рд╣рдорд╛рд░реА рдХреНрд╡реЗрд░реА рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдЕрдм рдкрд░рд┐рдгрд╛рдо рд╕рдВрдкрддреНрддрд┐ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдкрд░рд┐рдгрд╛рдо рдПрдХ
VNRecognizedTextObservation
, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╕рд╛рде рдХрдИ рдкрд░рд┐рдгрд╛рдо рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ (рдмрд╛рдж рдореЗрдВ рдЙрдореНрдореАрджрд╡рд╛рд░реЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ
VNRecognizedTextObservation
)ред
рдЖрдк рдорд╛рдиреНрдпрддрд╛ рдкреНрд░рд╛рдкреНрдд рдкрд╛рда рдХреА рдкреНрд░рддреНрдпреЗрдХ рдЗрдХрд╛рдИ рдХреЗ рд▓рд┐рдП 10 рдЙрдореНрдореАрджрд╡рд╛рд░ рддрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рд╡реЗ рдЖрддреНрдорд╡рд┐рд╢реНрд╡рд╛рд╕ рдХреЗ рдЕрд╡рд░реЛрд╣реА рдХреНрд░рдо рдореЗрдВ рдХреНрд░рдордмрджреНрдз рд╣реИрдВред рдпрд╣ рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреБрдЫ рд╢рдмреНрджрд╛рд╡рд▓реА рд╣реИ рдЬреЛ рдкрд╛рд░реНрд╕рд░ рдкрд╣рд▓реА рдХреЛрд╢рд┐рд╢ рдореЗрдВ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рдкрд╣рдЪрд╛рдирддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдмрд╛рдж рдореЗрдВ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ, рднрд▓реЗ рд╣реА рд╡рд╣ рдкрд░рд┐рдгрд╛рдо рдХреА рд╢реБрджреНрдзрддрд╛ рдореЗрдВ рдХрдо рдЖрд╢реНрд╡рд╕реНрдд рд╣реЛред
рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдореЗрдВ рдХреЗрд╡рд▓ рдкрд╣рд▓реЗ рдкрд░рд┐рдгрд╛рдо рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо
observation.topCandidates(1)
рдорд╛рдзреНрдпрдо рд╕реЗ рд▓реВрдк рдХрд░рддреЗ рд╣реИрдВред
observation.topCandidates(1)
рдФрд░ рдкрд╛рда рдФрд░ рдЖрддреНрдорд╡рд┐рд╢реНрд╡рд╛рд╕ рджреЛрдиреЛрдВ рдХреЛ рдирд┐рдХрд╛рд▓рддреЗ рд╣реИрдВред рдЬрдмрдХрд┐ рдЙрдореНрдореАрджрд╡рд╛рд░ рдЦреБрдж рдПрдХ рдЕрд▓рдЧ рдкрд╛рда рдФрд░ рдЖрддреНрдорд╡рд┐рд╢реНрд╡рд╛рд╕ рд░рдЦрддреЗ рд╣реИрдВ,
.boundingBox
рдПрдХ рд╣реА рд░рд╣рддрд╛ рд╣реИред
.boundingBox
рдирд┐рдЪрд▓реЗ рдмрд╛рдПрдБ рдХреЛрдиреЗ рдореЗрдВ рдЙрддреНрдкрддреНрддрд┐ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рд╕рдордиреНрд╡рдп рдкреНрд░рдгрд╛рд▓реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ UIKit рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╣реИ, рддреЛ рдЖрдкрдХреА рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдЖрдк рдХреА рдЬрд░реВрд░рдд рд╣реИ рдХрд┐ рд▓рдЧрднрдЧ рдпрджрд┐ рдореИрдВ рдЗрд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ
рдХрд╛рд░реНрдб рдХреА рдПрдХ
рддрд╕реНрд╡реАрд░ рдЪрд▓рд╛рддрд╛ рд╣реВрдВ, рддреЛ рдореБрдЭреЗ iPhone XS рдореИрдХреНрд╕ рдкрд░ 0.5 рд╕реЗрдХрдВрдб рд╕реЗ рднреА рдХрдо рд╕рдордп рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓рддреЗ рд╣реИрдВ:
Carnage Tyrant 1.0 (0.2654155572255453, 0.6955686092376709, 0.18710780143737793, 0.019915008544921786) Creature 1.0 (0.26317582130432127, 0.423814058303833, 0.09479101498921716, 0.013565015792846635) Dinosaur 1.0 (0.3883238156636556, 0.42648010253906254, 0.10021591186523438, 0.014479541778564364) Carnage Tyrant can't be countered. 1.0 (0.26538230578104655, 0.3742666244506836, 0.4300231456756592, 0.024643898010253906) Trample, hexproof 0.5 (0.2610074838002523, 0.34864263534545903, 0.23053167661031088, 0.022259855270385653) Sun Empire commanders are well versed 1.0 (0.2619712670644124, 0.31746063232421873, 0.45549616813659666, 0.022649812698364302) in advanced martial strategy. Still, the 1.0 (0.2623249689737956, 0.29798884391784664, 0.4314465204874674, 0.021180248260498136) correct maneuver is usually to deploy the 1.0 (0.2620727062225342, 0.2772137641906738, 0.4592740217844645, 0.02083740234375009) giant, implacable death lizard. 1.0 (0.2610833962758382, 0.252408218383789, 0.3502468903859457, 0.023736238479614258) 7/6 0.5 (0.6693102518717448, 0.23347826004028316, 0.04697717030843107, 0.018937730789184593) 179/279 M 1.0 (0.24829587936401368, 0.21893787384033203, 0.08339192072550453, 0.011646795272827193) XLN: EN N YEONG-HAO HAN 0.5 (0.246867307027181, 0.20903720855712893, 0.19095951716105145, 0.012227916717529319) TN & 0 2017 Wizards of the Coast 1.0 (0.5428387324015299, 0.21133480072021482, 0.19361832936604817, 0.011657810211181618)
рдпрд╣ рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд╣реИ! рдкрд╛рда рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдЯреБрдХрдбрд╝реЗ рдХреЛ рдорд╛рдиреНрдпрддрд╛ рджреА рдЧрдИ рдереА, рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдмрд╛рдЙрдВрдбрд┐рдВрдЧ рдмреЙрдХреНрд╕ рдореЗрдВ рд░рдЦрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ 1.0 рдХреА рдЖрддреНрдорд╡рд┐рд╢реНрд╡рд╛рд╕ рд░реЗрдЯрд┐рдВрдЧ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд╡рд╛рдкрд╕ рдЖ рдЧрдпрд╛ред
рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдПрдХ рдмрд╣реБрдд рдЫреЛрдЯрд╛ рдХреЙрдкреАрд░рд╛рдЗрдЯ рдЬреНрдпрд╛рджрд╛рддрд░ рд╕рд╣реА рд╣реИред рдпрд╣ рд╕рдм 3.1 рдПрдордмреА рд╡рдЬрди рд╡рд╛рд▓реЗ 3024x4032 рдЫрд╡рд┐ рдкрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЕрдЧрд░ рдореИрдВрдиреЗ рдкрд╣рд▓реА рдмрд╛рд░ рдЫрд╡рд┐ рдХреЛ рдХрдо рдХрд┐рдпрд╛ рддреЛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдФрд░ рднреА рддреЗрдЬрд╝ рд╣реЛрдЧреАред рдпрд╣ рднреА рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдирдП рдП 12 рдмрд╛рдпреЛрдирд┐рдХ рдЪрд┐рдкреНрд╕ рдкрд░ рдпрд╣ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдмрд╣реБрдд рддреЗрдЬ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдПрдХ рд╡рд┐рд╢реЗрд╖ рддрдВрддреНрд░рд┐рдХрд╛ рдЗрдВрдЬрди рд╣реИред
рдЬрдм рдкрд╛рда рдХреЛ рдорд╛рдиреНрдпрддрд╛ рджреА рдЬрд╛рддреА рд╣реИ, рддреЛ рдЖрдЦрд┐рд░реА рдЪреАрдЬ рдЬреЛ рдореБрдЭреЗ рдЪрд╛рд╣рд┐рдП рдЙрд╕ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдмрд╛рд╣рд░ рдЦреАрдВрдЪрддреА рд╣реИред рдореИрдВ рдпрд╣рд╛рдВ рд╕рднреА рдХреЛрдб рдирд╣реАрдВ рдбрд╛рд▓реВрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдореБрдЦреНрдп рддрд░реНрдХ рд╕реНрдерд╛рди рдирд┐рд░реНрдзрд╛рд░рд┐рдд
.boundingBox
рдкреНрд░рддреНрдпреЗрдХ
.boundingBox
рдкрд░
.boundingBox
рдХрд░рдирд╛ рд╣реИ, рддрд╛рдХрд┐ рдореИрдВ рдирд┐рдЪрд▓реЗ рдмрд╛рдПрдБ рдХреЛрдиреЗ рдореЗрдВ рдкрд╛рда рдХрд╛ рдЪрдпрди рдХрд░
.boundingBox
рдФрд░ рдКрдкрд░реА рдмрд╛рдПрдБ рдХреЛрдиреЗ рдореЗрдВ, рджрд╛рдИрдВ рдУрд░ рдХреБрдЫ рднреА рдЕрдирджреЗрдЦрд╛ рдХрд░
.boundingBox
ред
рдЕрдВрддрд┐рдо рдкрд░рд┐рдгрд╛рдо рдПрдХ рд╕реНрдХреИрдирд┐рдВрдЧ рдХрд╛рд░реНрдб рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╣реИ рдФрд░ рдПрдХ рд╕реЗрдХрдВрдб рд╕реЗ рднреА рдХрдо рд╕рдордп рдореЗрдВ рдореЗрд░реЗ рд▓рд┐рдП рдкрд░рд┐рдгрд╛рдо рд╡рд╛рдкрд╕ рдХрд░ рд░рд╣рд╛ рд╣реИред
PS рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдореБрдЭреЗ рдХреЗрд╡рд▓ рдПрдХ рд░рд┐рд▓реАрдЬрд╝ рдХреЛрдб рдФрд░ рдПрдХ рд╕рдВрдЧреНрд░рд╣ рд╕рдВрдЦреНрдпрд╛ (рдпрд╣ рдПрдХ рд╕реВрдЪрдХрд╛рдВрдХ) рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдлрд┐рд░ рдЙрдиреНрд╣реЗрдВ рдЧреЗрдо рдХреЗ рдирд┐рдпрдореЛрдВ рдФрд░ рд▓рд╛рдЧрдд рд╕рд╣рд┐рдд рдЗрд╕ рдирдХреНрд╢реЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рднреА рд╕рдВрднрд╛рд╡рд┐рдд рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдХреНрд░рд┐рдлрд╝рд▓ рд╕реЗрд╡рд╛ рдПрдкреАрдЖрдИ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
GitHub рдкрд░ рдПрдХ рдирдореВрдирд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдЙрдкрд▓рдмреНрдз
рд╣реИ ред