Vision হল Apple-এর কম্পিউটার ভিশন ফ্রেমওয়ার্ক, যা প্রথম 2017 সালে iOS 11-এ উপস্থাপিত হয়েছিল। Vision মুখ শনাক্তকরণ, টেক্সট রিকগনিশন (OCR), বারকোড সনাক্তকরণ, অবজেক্ট ট্র্যাকিং, ইমেজ ক্লাসিফিকেশন এবং কনট্যুর বিশ্লেষণের জন্য প্রস্তুত অ্যালগরিদম সরবরাহ করে — সবকিছু ডিভাইসে Neural Engine ব্যবহার করে সম্পাদিত হয়। Apple WWDC 2023 অনুসারে, Vision স্ট্যান্ডার্ড Photos অ্যাপে মুখ শনাক্তকরণের জন্য এবং Camera অ্যাপে iPhone ও iPad-এ রিয়েল-টাইম টেক্সট সনাক্তকরণের জন্য ব্যবহৃত হয়।
মূল পয়েন্ট
Vision একটি উচ্চ-স্তরের কম্পিউটার ভিশন ফ্রেমওয়ার্ক যা জটিল মেশিন লার্নিং অ্যালগরিদমকে একটি সরল অনুরোধ API (VNRequest)-এর পিছনে বিমূর্ত করে। ডেভেলপারকে কনভোলিউশনাল নিউরাল নেটওয়ার্ক বুঝতে হবে না — শুধু উপযুক্ত অনুরোধ টাইপ তৈরি করুন, একটি ইমেজ পাস করুন এবং ফলাফল পান।
Vision-এর আর্কিটেকচার Request → Handler → Result নীতির উপর ভিত্তি করে: VNImageRequestHandler একটি ইমেজ গ্রহণ করে, VNRequest নির্বাহ করে এবং ফলাফলসহ VNObservation-এর একটি অ্যারে ফেরত দেয়। এটি একটি একক ইমেজে একাধিক অনুরোধ একত্রিত করার অনুমতি দেয় — উদাহরণস্বরূপ, একটি ফটোতে একসাথে মুখ এবং টেক্সট শনাক্ত করা।
Vision iOS 11+ এবং macOS 10.13+ সমর্থন করে। Neural Engine-এর মাধ্যমে হার্ডওয়্যার ত্বরণের জন্য A12 Bionic চিপ বা তার নতুন প্রয়োজন। A17 Pro এবং M-সিরিজ ডিভাইসে, Vision স্ট্রিমিং ভিডিওর জন্য প্রতি সেকেন্ডে 60 ফ্রেম পর্যন্ত প্রক্রিয়া করে।
মূল সুবিধা Vision-এর হল সম্পূর্ণ গোপনীয়তা: সমস্ত গণনা ডিভাইসে সম্পাদিত হয়, ইমেজ কখনও সার্ভারে পাঠানো হয় না। এটি ফ্রেমওয়ার্কটিকে সংবেদনশীল ডেটা নিয়ে কাজ করা অ্যাপ্লিকেশনে ব্যবহার করার অনুমতি দেয়, যেমন মেডিকেল বা ব্যাংকিং অ্যাপ।
VNDetectFaceRectanglesRequest একটি ইমেজে মুখ শনাক্ত করার জন্য Vision-এর মৌলিক অনুরোধ। এটি প্রতিটি মুখকে ঘিরে থাকা আয়তক্ষেত্রের স্থানাঙ্ক ফেরত দেয়, কোনো নির্দিষ্ট ব্যক্তির পরিচয় না করেই।
আরও বিস্তারিত বিশ্লেষণের জন্য, VNDetectFaceLandmarksRequest ব্যবহার করুন, যা মুখের মূল পয়েন্টগুলি চিহ্নিত করে: চোখ, ভ্রু, নাক, মুখ, চোয়ালের কনট্যুর। এই ডেটা মাস্ক প্রয়োগ, ইমোজি অ্যানিমেশন এবং রিয়েল-টাইম ফিল্টার (যেমন FaceTime এবং Snapchat-এ) জন্য ব্যবহৃত হয়।
import Vision
import UIKit
guard let image = UIImage(named: "photo") else { return }
let request = VNDetectFaceRectanglesRequest()
let handler = VNImageRequestHandler(cgImage: image.cgImage!, options: [:])
try handler.perform([request])
for observation in request.results ?? [] {
let bbox = observation.boundingBox
print("Face at x=\\(bbox.origin.x), y=\\(bbox.origin.y)")
}
VNFaceObservation-এ শুধু boundingBox নয় বরং confidence (0 থেকে 1) এবং landmarks-ও রয়েছে — যদি অনুরোধ VNDetectFaceLandmarksRequest হয় তবে মুখের পয়েন্টের একটি অ্যারে। 0.5-এর নিচে confidence সাধারণত মিথ্যা পজিটিভ নির্দেশ করে — এই ধরনের ফলাফল বাতিল করার পরামর্শ দেওয়া হয়।
Vision VNDetectFaceCaptureQualityRequest-ও সমর্থন করে, যা মুখের ইমেজের গুণমান মূল্যায়ন করে: আলোকসজ্জা, তীক্ষ্ণতা, ঘূর্ণন কোণ। এটি ব্যবহারকারী নিবন্ধনের সময় সেরা ফ্রেম নির্বাচন বা অবতার তৈরি করার জন্য দরকারী।
VNRecognizeTextRequest হল Apple-এর বিল্ট-ইন OCR ইঞ্জিন, যা iOS 13-এ উপস্থাপিত হয়েছিল। এটি ১৩টি ভাষা সমর্থন করে ইমেজে মুদ্রিত টেক্সট শনাক্ত করে: ইংরেজি, রুশ, চীনা, জাপানি, কোরিয়ান, ইতালীয়, জার্মান, স্প্যানিশ, পর্তুগিজ, ফ্রেঞ্চ, আরবি, ভিয়েতনামি এবং থাই।
VNRecognizeTextRequest দুটি নির্ভুলতা স্তর সমর্থন করে: .fast (দ্রুত, বিপরীত পটভূমিতে সরল টেক্সটের জন্য) এবং .accurate (সঠিক, বিভিন্ন ফন্ট এবং কোণসহ জটিল দৃশ্যের জন্য)। .fast 3–5 গুণ দ্রুত কিন্তু হাতের লেখা টেক্সট এবং অ-মানক ফন্ট কম কার্যকরভাবে সামলায়।
import Vision
let textRequest = VNRecognizeTextRequest { request, _ in
guard let observations = request.results as? [VNRecognizedTextObservation]
else { return }
for observation in observations {
let topCandidate = observation.topCandidates(1).first
print(topCandidate?.string ?? "")
}
}
textRequest.recognitionLevel = .accurate
textRequest.usesLanguageCorrection = true
usesLanguageCorrection প্রপার্টি একটি ভাষা মডেল ব্যবহার করে শনাক্ত টেক্সট সংশোধন সক্ষম করে। এটি ইংরেজির নির্ভুলতা ১০–১৫% উন্নত করে কিন্তু প্রক্রিয়াকরণ সময় বাড়ায়। রুশ ভাষা সংশোধনও উপলব্ধ যখন উপযুক্ত শনাক্তকরণ নির্দিষ্ট করা হয়।
Apple ML Research 2022 অনুসারে, .accurate স্তরে VNRecognizeTextRequest-এর নির্ভুলতা ইংরেজিতে পরিষ্কার ডকুমেন্ট ফটোর জন্য ৯৬% এবং রুশের জন্য প্রায় ৮৮%। প্যাকেজিং, সাইন এবং স্ক্রিনে টেক্সটের জন্য, নির্ভুলতা ৭৫–৮৫% এ নেমে আসে।
| শনাক্তকরণ স্তর | গতি | নির্ভুলতা (ইংরেজি) | রুশ সমর্থন |
|---|---|---|---|
| .fast | ০.১–০.৩ সেকেন্ড | ~৮৫% | হ্যাঁ |
| .accurate | ০.৩–১.০ সেকেন্ড | ~৯৬% | হ্যাঁ |
VNDetectBarcodesRequest — ইমেজে বারকোড এবং QR কোড শনাক্ত ও ডিকোড করার জন্য Vision অনুরোধ। সমস্ত প্রধান ফর্ম্যাট সমর্থিত: EAN-8, EAN-13, UPC-A, UPC-E, Code 39, Code 93, Code 128, PDF417, Aztec এবং QR।
AVFoundation (AVCaptureMetadataOutput)-এর বিপরীতে, Vision শুধু ভিডিও স্ট্রিম নয় বরং স্থির ইমেজ নিয়েও কাজ করে — যা বিদ্যমান ফটো বা স্ক্রিনশট থেকে কোড স্ক্যান করার অনুমতি দেয়। Vision কোডের boundingBox পিক্সেল নির্ভুলতার সাথে নির্ধারণ করে, যা শনাক্ত কোডের চারপাশে ফ্রেম অ্যানিমেট করার জন্য সুবিধাজনক।
import Vision
let barcodeRequest = VNDetectBarcodesRequest { request, _ in
guard let observations = request.results as? [VNBarcodeObservation]
else { return }
for observation in observations {
let payload = observation.payloadStringValue ?? ""
print("Barcode: \\(payload), Symbology: \\(observation.symbology.rawValue)"
}
}
VNBarcodeObservation-এ payloadStringValue (ডিকোড করা বিষয়বস্তু), symbology (কোডের ধরন) এবং confidence রয়েছে। QR কোডের জন্য, payload URL, টেক্সট বা JSON হতে পারে। EAN/UPC-এর জন্য, একটি সংখ্যাসূচক পণ্য কোড ফেরত দেওয়া হয় যা ডাটাবেসে আইটেম অনুসন্ধানে ব্যবহার করা যেতে পারে।
Vision একটি ইমেজে একাধিক বারকোড প্রক্রিয়া করতে পারে — observations অ্যারেতে প্রতিটি শনাক্ত কোডের জন্য একটি অবজেক্ট থাকে। এটি পণ্যের ব্যাচ বা একাধিক বারকোডসহ ডকুমেন্ট স্ক্যান করার জন্য দরকারী।
VNDetectObjectAtPointRequest এবং VNSequenceRequestHandler — ভিডিও স্ট্রিমে অবজেক্ট ট্র্যাক করার জন্য Vision টুল। প্রথমটি ব্যবহারকারীর স্পর্শ বিন্দু দ্বারা অবজেক্ট শনাক্ত করে, দ্বিতীয়টি ভিডিও ফ্রেমের মধ্যে অবজেক্ট ট্র্যাক করে।
VNSequenceRequestHandler ইমেজের একটি ক্রম (ভিডিও ফ্রেম) গ্রহণ করে এবং প্রতিটি ফ্রেমের জন্য ট্র্যাক করা অবজেক্টের আপডেট অবস্থান ফেরত দেয়। এটি অগমেন্টেড রিয়েলিটি অ্যাপ, ভিডিও এডিটর এবং নজরদারি সিস্টেমে ব্যবহৃত হয়।
import Vision
let trackingRequest = VNTrackObjectRequest(detectedObjectObservation: initialObservation)
let sequenceHandler = VNSequenceRequestHandler()
for frame in videoFrames {
try sequenceHandler.perform([trackingRequest],
on: frame.cgImage!)
let newBBox = trackingRequest.results?.first?.boundingBox
// স্ক্রিনে অবজেক্টের অবস্থান আপডেট করুন
}
VNTrackObjectRequest অপটিক্যাল ফ্লো-ভিত্তিক ট্র্যাকিং অ্যালগরিদম ব্যবহার করে — এটি প্রতি ফ্রেমে ডিটেক্টর পুনরায় প্রশিক্ষণ দেয় না বরং তার পূর্ববর্তী অবস্থান থেকে অবজেক্টের সরণ গণনা করে। এটি Neural Engine ছাড়াও ডিভাইসে রিয়েল-টাইম পারফরম্যান্স সক্ষম করে।
সীমাবদ্ধতা: দ্রুত গতি, অবরোধ বা আলোতে আকস্মিক পরিবর্তনের সময় ট্র্যাকিং অবজেক্ট হারাতে পারে। Apple ট্র্যাকিং সংশোধনের জন্য প্রতি ১০–১৫ ফ্রেমে ডিটেকশন (VNDetectObjectAtPointRequest) পুনরায় চালু করার পরামর্শ দেয়।
VNClassifyImageRequest — ১০০০টি বিভাগে ইমেজ শ্রেণীবিভাগের জন্য Vision-এর বিল্ট-ইন মডেল (ImageNet-এ প্রশিক্ষিত ResNet-50 মডেল)। অনুরোধ বিভাগের নাম এবং confidenceসহ VNClassificationObservation-এর একটি অ্যারে ফেরত দেয়।
VNDetectContoursRequest ইমেজ কনট্যুর বিশ্লেষণ করে — অবজেক্ট সীমানা বের করে, যা সেগমেন্টেশন, আউটলাইনিং এবং শনাক্তকরণের আগে প্রিপ্রসেসিং-এর জন্য দরকারী। অনুরোধ ইমেজে প্রতিটি কনট্যুর বর্ণনাকারী পয়েন্টের একটি অ্যারে ফেরত দেয়।
import Vision
// ইমেজ ক্লাসিফিকেশন
let classificationRequest = VNClassifyImageRequest { request, _ in
guard let results = request.results as? [VNClassificationObservation]
else { return }
let topMatch = results.prefix(3).filter { $0.confidence > 0.3 }
for match in topMatch {
print("\\(match.identifier): \\(match.confidence)"
}
}
VNClassifyImageRequest সাধারণ বিভাগের (বিড়াল, কুকুর, গাড়ি, খাবার) জন্য ভাল কাজ করে কিন্তু নির্দিষ্ট অবজেক্টের জন্য উপযুক্ত নয় — সেগুলির জন্য আপনাকে একটি কাস্টম Core ML মডেল প্রশিক্ষণ দিতে হবে এবং VNCoreMLRequest ব্যবহার করতে হবে। Apple-এর মডেল মোবাইল ডিভাইসের জন্য অপ্টিমাইজ করা এবং মাত্র ৫ MB নেয়।
VNDetectContoursRequest কনট্যুর প্রকার (বাহ্যিক, অভ্যন্তরীণ, ছিদ্র) সহ পয়েন্টের অ্যারে হিসাবে কনট্যুর ফেরত দেয়। এই অনুরোধটি OCR-এর আগে ইমেজ প্রিপ্রসেসিং (টেক্সট কনট্রাস্ট উন্নতি), প্রভাব আঁকা (অবজেক্ট আউটলাইনিং) এবং আকৃতি বিশ্লেষণের জন্য ব্যবহৃত হয়।
| Vision অনুরোধ | উদ্দেশ্য | iOS সংস্করণ |
|---|---|---|
| VNDetectFaceRectanglesRequest | ইমেজে মুখ খোঁজা | iOS 11 |
| VNRecognizeTextRequest | টেক্সট শনাক্তকরণ (OCR) | iOS 13 |
| VNDetectBarcodesRequest | বারকোড এবং QR সনাক্তকরণ | iOS 11 |
| VNClassifyImageRequest | ইমেজ শ্রেণীবিভাগ | iOS 13 |
| VNDetectContoursRequest | কনট্যুর বিশ্লেষণ | iOS 14 |
| VNTrackObjectRequest | অবজেক্ট ট্র্যাকিং | iOS 11 |
সাধারণ জিজ্ঞাসা
Vision মডেল প্রশিক্ষণ ছাড়াই প্রস্তুত অ্যালগরিদম (মুখ শনাক্তকরণ, OCR, বারকোড) সরবরাহ করে। Core ML কাস্টম মডেল নির্বাহ করার ইঞ্জিন। Vision + VNCoreMLRequest Vision পাইপলাইনে Core ML মডেল চালানোর অনুমতি দেয়, উভয় জগতের সেরাটি পায়: Vision-এর প্রস্তুত ডিটেক্টর + Core ML কাস্টম শ্রেণীবিভাগ।
হ্যাঁ, Vision ট্র্যাকিংয়ের জন্য VNSequenceRequestHandler এবং ফ্রেম-বাই-ফ্রেম প্রক্রিয়াকরণের জন্য AVCaptureVideoDataOutput-এর মাধ্যমে রিয়েল-টাইম ভিডিও স্ট্রিম প্রক্রিয়াকরণ সমর্থন করে। A12+ এবং Neural Engineযুক্ত ডিভাইসে, Vision মুখ শনাক্তকরণের জন্য 60 fps পর্যন্ত প্রক্রিয়া করে। ভারী কাজের (OCR, শ্রেণীবিভাগ) জন্য, প্রতি ৫–১০ম ফ্রেম প্রক্রিয়া করার পরামর্শ দেওয়া হয়।
VNRecognizeTextRequest ১৩টি ভাষা সমর্থন করে: ইংরেজি, রুশ, চীনা (সরলীকৃত এবং ঐতিহ্যবাহী), জাপানি, কোরিয়ান, ইতালীয়, জার্মান, স্প্যানিশ, পর্তুগিজ, ফ্রেঞ্চ, আরবি, ভিয়েতনামি এবং থাই। একটি ইমেজে একাধিক ভাষা শনাক্ত করতে, recognitionLanguages প্রপার্টিতে একটি অ্যারে নির্দিষ্ট করুন।
হ্যাঁ, VNCoreMLRequest-এর মাধ্যমে। আপনি VNCoreMLModel-এ মোড়ানো একটি Core ML মডেল তৈরি করেন এবং এটি VNCoreMLRequest-এ পাস করেন। Vision স্বয়ংক্রিয়ভাবে ইমেজ প্রিপ্রসেসিং (স্কেলিং, ক্রপিং) সামলায় এবং এটি Core ML মডেলে ফিড করে। ফলাফল মডেলের আউটপুট ডেটাসহ VNCoreMLFeatureValueObservation হিসাবে ফেরত দেওয়া হয়।
না, Vision সম্পূর্ণ বিশ্লেষণ ডিভাইসেই করে। ইমেজ কখনও ব্যবহারকারীর ডিভাইস ছেড়ে যায় না। এটি Apple-এর মৌলিক আর্কিটেকচার: সমস্ত ML ফ্রেমওয়ার্ক (Vision, NaturalLanguage, Core ML, Speech) গোপনীয়তা নিশ্চিত করতে অন-ডিভাইস কাজ করে। কোনো ডেটা Apple-এর সার্ভারে পাঠানো হয় না।
সারসংক্ষেপ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন