![AWS Tutorial For Beginners | AWS Full Course - Learn AWS In 10 Hours | AWS Training | Edureka](https://i.ytimg.com/vi/k1RI5locZE4/hqdefault.jpg)
విషయము
- పరికరంలో లేదా క్లౌడ్లో ఉన్నారా?
- ML కిట్తో వచన గుర్తింపు అనువర్తనాన్ని సృష్టిస్తోంది
- Google యొక్క ముందస్తు శిక్షణ పొందిన యంత్ర అభ్యాస నమూనాలను డౌన్లోడ్ చేయండి
- లేఅవుట్ను నిర్మించడం
- చర్య బార్ చిహ్నాలు: గ్యాలరీ అనువర్తనాన్ని ప్రారంభిస్తోంది
- అనుమతి అభ్యర్థనలను నిర్వహించడం మరియు ఈవెంట్లను క్లిక్ చేయండి
- CreateTempFile తో చిత్రాల పరిమాణాన్ని మార్చడం
- చిత్రాన్ని చిత్ర వీక్షణకు సెట్ చేయండి
- వచనాన్ని గుర్తించడానికి అనువర్తనాన్ని బోధిస్తోంది
- ప్రాజెక్ట్ను పరీక్షిస్తోంది
- చుట్టి వేయు
అనువాద అనువర్తనాలకు ప్రాతిపదికగా మీరు టెక్స్ట్ రికగ్నిషన్ API ని ఉపయోగించవచ్చు లేదా వినియోగదారు తమ కెమెరాను వారు కష్టపడుతున్న ఏ వచనంలోనైనా సూచించగలిగే ప్రాప్యత సేవలు మరియు వారికి గట్టిగా చదవండి.
ఈ ట్యుటోరియల్లో, యూజర్ గ్యాలరీలోని ఏదైనా చిత్రం నుండి వచనాన్ని తీయగల అనువర్తనాన్ని సృష్టించడం ద్వారా మేము విస్తృత శ్రేణి వినూత్న లక్షణాలకు పునాది వేస్తాము. మేము ఈ ట్యుటోరియల్లో దీన్ని కవర్ చేయనప్పటికీ, ఈ అనువర్తనాన్ని పరికర కెమెరాకు కనెక్ట్ చేయడం ద్వారా మీరు నిజ సమయంలో యూజర్ పరిసరాల నుండి వచనాన్ని సంగ్రహించవచ్చు.
పరికరంలో లేదా క్లౌడ్లో ఉన్నారా?
కొన్ని ML కిట్ API లు పరికరంలో మాత్రమే అందుబాటులో ఉన్నాయి, అయితే కొన్ని టెక్స్ట్ రికగ్నిషన్ API తో సహా పరికరంలో మరియు క్లౌడ్లో అందుబాటులో ఉన్నాయి.
క్లౌడ్-ఆధారిత టెక్స్ట్ API విస్తృతమైన భాషలను మరియు అక్షరాలను గుర్తించగలదు మరియు దాని పరికరంలో ఉన్న ప్రతిరూపం కంటే ఎక్కువ ఖచ్చితత్వాన్ని ఇస్తుంది. అయితే, అది చేస్తుంది క్రియాశీల ఇంటర్నెట్ కనెక్షన్ అవసరం మరియు ఇది బ్లేజ్-స్థాయి ప్రాజెక్టులకు మాత్రమే అందుబాటులో ఉంటుంది.
ఈ వ్యాసంలో, మేము టెక్స్ట్ రికగ్నిషన్ API ని స్థానికంగా నడుపుతున్నాము, కాబట్టి మీరు బ్లేజ్కి అప్గ్రేడ్ అయ్యారా లేదా మీరు ఉచిత ఫైర్బేస్ స్పార్క్ ప్లాన్లో ఉన్నారా అనే దానితో సంబంధం లేకుండా మీరు అనుసరించవచ్చు.
ML కిట్తో వచన గుర్తింపు అనువర్తనాన్ని సృష్టిస్తోంది
మీకు నచ్చిన సెట్టింగ్లతో ఒక అప్లికేషన్ను సృష్టించండి, కానీ ప్రాంప్ట్ చేసినప్పుడు “ఖాళీ కార్యాచరణ” టెంప్లేట్ను ఎంచుకోండి.
ML కిట్ SDK ఫైర్బేస్లో భాగం, కాబట్టి మీరు మీ ప్రాజెక్ట్ను SHA-1 సంతకం ప్రమాణపత్రాన్ని ఉపయోగించి ఫైర్బేస్కు కనెక్ట్ చేయాలి. మీ ప్రాజెక్ట్ యొక్క SHA-1 పొందడానికి:
- Android స్టూడియో యొక్క “Gradle” టాబ్ని ఎంచుకోండి.
- “గ్రాడిల్ ప్రాజెక్ట్స్” ప్యానెల్లో, మీ ప్రాజెక్ట్ యొక్క “రూట్” ని విస్తరించడానికి డబుల్ క్లిక్ చేసి, ఆపై “టాస్క్లు> ఆండ్రాయిడ్> సంతకం నివేదిక” ఎంచుకోండి.
- ఆండ్రాయిడ్ స్టూడియో విండో దిగువన ఉన్న ప్యానెల్ ఈ ప్రాజెక్ట్ గురించి కొంత సమాచారాన్ని ప్రదర్శించడానికి అప్డేట్ చేయాలి - దాని SHA-1 సంతకం సర్టిఫికెట్తో సహా.
మీ ప్రాజెక్ట్ను ఫైర్బేస్కు కనెక్ట్ చేయడానికి:
- మీ వెబ్ బ్రౌజర్లో, ఫైర్బేస్ కన్సోల్ను ప్రారంభించండి.
- “ప్రాజెక్ట్ను జోడించు” ఎంచుకోండి.
- మీ ప్రాజెక్ట్ పేరు పెట్టండి; నేను “ML టెస్ట్” ఉపయోగిస్తున్నాను.
- నిబంధనలు మరియు షరతులను చదవండి మరియు మీరు కొనసాగడానికి సంతోషంగా ఉంటే “ప్రాజెక్ట్ను సృష్టించు” తరువాత “నేను అంగీకరిస్తున్నాను…” ఎంచుకోండి.
- “మీ Android అనువర్తనానికి ఫైర్బేస్ జోడించండి” ఎంచుకోండి.
- మీ ప్రాజెక్ట్ యొక్క ప్యాకేజీ పేరును నమోదు చేయండి, వీటిని మీరు మెయిన్ యాక్టివిటీ ఫైల్ ఎగువన మరియు మానిఫెస్ట్ లోపల కనుగొంటారు.
- మీ ప్రాజెక్ట్ యొక్క SHA-1 సంతకం ప్రమాణపత్రాన్ని నమోదు చేయండి.
- “రిజిస్టర్ అనువర్తనం” క్లిక్ చేయండి.
- “Google-services.json ని డౌన్లోడ్ చేయండి” ఎంచుకోండి. ఈ ఫైల్లో API కీతో సహా మీ ప్రాజెక్ట్ కోసం అవసరమైన అన్ని ఫైర్బేస్ మెటాడేటా ఉంది.
- Android స్టూడియోలో, google-services.json ఫైల్ను మీ ప్రాజెక్ట్ యొక్క “అనువర్తనం” డైరెక్టరీలోకి లాగండి.
- మీ ప్రాజెక్ట్-స్థాయి బిల్డ్.గ్రాడిల్ ఫైల్ను తెరిచి, Google సేవల క్లాస్పాత్ను జోడించండి:
classpath com.google.gms: google-services: 4.0.1
- మీ అనువర్తన-స్థాయి బిల్డ్.గ్రాడిల్ ఫైల్ను తెరిచి, ఫైర్బేస్ కోర్, ఫైర్బేస్ ML విజన్ మరియు మోడల్ ఇంటర్ప్రెటర్, మరియు Google సేవల ప్లగ్ఇన్ కోసం డిపెండెన్సీలను జోడించండి:
ప్లగిన్ను వర్తింపజేయండి: com.google.gms.google-services ... ... ... డిపెండెన్సీలు {అమలు ఫైల్ట్రీ (dir: libs, include :) అమలు com.google.firebase: firebase-core: 16.0.1 అమలు com. google.firebase: firebase-ml-vision: 16.0.0 అమలు com.google.firebase: ఫైర్బేస్- ml- మోడల్-ఇంటర్ప్రెటర్: 16.0.0
ఈ సమయంలో, మీరు మీ ప్రాజెక్ట్ను ఫైర్బేస్ సర్వర్లకు కనెక్ట్ చేయగలిగేలా అమలు చేయాలి:
- మీ అనువర్తనాన్ని భౌతిక Android స్మార్ట్ఫోన్ లేదా టాబ్లెట్ లేదా Android వర్చువల్ పరికరం (AVD) లో ఇన్స్టాల్ చేయండి.
- ఫైర్బేస్ కన్సోల్లో, “ఇన్స్టాలేషన్ను ధృవీకరించడానికి అనువర్తనాన్ని అమలు చేయండి” ఎంచుకోండి.
- కొన్ని క్షణాల తరువాత, మీరు “అభినందనలు” చూడాలి; “కన్సోల్కు కొనసాగించు” ఎంచుకోండి.
Google యొక్క ముందస్తు శిక్షణ పొందిన యంత్ర అభ్యాస నమూనాలను డౌన్లోడ్ చేయండి
అప్రమేయంగా, ML కిట్ మోడల్స్ అవసరమైనప్పుడు మరియు డౌన్లోడ్ చేసినప్పుడు మాత్రమే డౌన్లోడ్ చేస్తుంది, కాబట్టి వినియోగదారు మొదటిసారి వచనాన్ని సేకరించేందుకు ప్రయత్నించినప్పుడు మా అనువర్తనం OCR మోడల్ను డౌన్లోడ్ చేస్తుంది.
ఇది వినియోగదారు అనుభవంపై ప్రతికూల ప్రభావాన్ని చూపగలదు - ఒక లక్షణాన్ని ప్రాప్యత చేయడానికి ప్రయత్నిస్తున్నట్లు imagine హించుకోండి, ఈ లక్షణాన్ని వాస్తవంగా బట్వాడా చేయడానికి ముందు అనువర్తనం మరిన్ని వనరులను డౌన్లోడ్ చేసుకోవాల్సిన అవసరం ఉందని తెలుసుకోవడానికి మాత్రమే. చెత్త దృష్టాంతంలో, మీ అనువర్తనం అవసరమైన వనరులను డౌన్లోడ్ చేయలేకపోవచ్చు, అవి అవసరమైనప్పుడు, ఉదాహరణకు పరికరానికి ఇంటర్నెట్ కనెక్షన్ లేకపోతే.
ఇది మా అనువర్తనంతో జరగదని నిర్ధారించుకోవడానికి, నేను అవసరమైన OCR మోడల్ను ఇన్స్టాల్ సమయంలో డౌన్లోడ్ చేయబోతున్నాను, దీనికి మానియెస్ట్లో కొన్ని మార్పులు అవసరం.
మేము మానిఫెస్ట్ తెరిచినప్పుడు, నేను WRITE_EXTERNAL_STORAGE అనుమతిని కూడా జోడించబోతున్నాను, దానిని మేము తరువాత ఈ ట్యుటోరియల్లో ఉపయోగిస్తాము.
లేఅవుట్ను నిర్మించడం
సులభమైన విషయాలను బయటకు తీద్దాం మరియు వీటిని కలిగి ఉన్న లేఅవుట్ను సృష్టించండి:
- ఒక ఇమేజ్ వ్యూ. ప్రారంభంలో, ఇది ప్లేస్హోల్డర్ను ప్రదర్శిస్తుంది, కాని వినియోగదారు వారి గ్యాలరీ నుండి చిత్రాన్ని ఎంచుకున్న తర్వాత ఇది నవీకరించబడుతుంది.
- టెక్స్ట్ వెలికితీతను ప్రేరేపించే బటన్.
- టెక్స్ట్ వ్యూ, ఇక్కడ మేము సేకరించిన వచనాన్ని ప్రదర్శిస్తాము.
- స్క్రోల్ వ్యూ. సేకరించిన వచనం తెరపై చక్కగా సరిపోతుందనే గ్యారెంటీ లేనందున, నేను టెక్స్ట్ వ్యూను స్క్రోల్ వ్యూలో ఉంచబోతున్నాను.
పూర్తయిన కార్యాచరణ_మెయిన్. Xml ఫైల్ ఇక్కడ ఉంది:
ఈ లేఅవుట్ “ic_placeholder” డ్రా చేయదగినదిగా సూచిస్తుంది, కాబట్టి దీన్ని ఇప్పుడే సృష్టించండి:
- Android స్టూడియో టూల్ బార్ నుండి “ఫైల్> క్రొత్త> చిత్ర ఆస్తి” ఎంచుకోండి.
- “ఐకాన్ టైప్” డ్రాప్డౌన్ తెరిచి “యాక్షన్ బార్ మరియు టాబ్ చిహ్నాలు” ఎంచుకోండి.
- “క్లిప్ ఆర్ట్” రేడియో బటన్ ఎంచుకోబడిందని నిర్ధారించుకోండి.
- “క్లిప్ ఆర్ట్” బటన్ను క్లిక్ చేయండి.
- మీరు మీ ప్లేస్హోల్డర్గా ఉపయోగించాలనుకుంటున్న చిత్రాన్ని ఎంచుకోండి; నేను “ఫోటోలకు జోడించు” ఉపయోగిస్తున్నాను.
- “సరే” క్లిక్ చేయండి.
- “థీమ్” డ్రాప్డౌన్ తెరిచి, “HOLO_LIGHT” ఎంచుకోండి.
- “పేరు,” ఫీల్డ్లో, “ic_placeholder” ని నమోదు చేయండి.
- “తదుపరి” క్లిక్ చేయండి. సమాచారాన్ని చదవండి మరియు మీరు కొనసాగడం సంతోషంగా ఉంటే “ముగించు” క్లిక్ చేయండి.
చర్య బార్ చిహ్నాలు: గ్యాలరీ అనువర్తనాన్ని ప్రారంభిస్తోంది
తరువాత, నేను వినియోగదారు గ్యాలరీని ప్రారంభించే యాక్షన్ బార్ ఐటెమ్ను సృష్టించబోతున్నాను, వారు చిత్రాన్ని ఎంచుకోవడానికి సిద్ధంగా ఉన్నారు.
మీరు “res / menu” డైరెక్టరీలో నివసించే మెను రిసోర్స్ ఫైల్ లోపల యాక్షన్ బార్ చిహ్నాలను నిర్వచించారు. మీ ప్రాజెక్ట్ ఈ డైరెక్టరీని కలిగి ఉండకపోతే, మీరు దీన్ని సృష్టించాలి:
- మీ ప్రాజెక్ట్ యొక్క “res” డైరెక్టరీని నియంత్రించండి మరియు “క్రొత్త> Android వనరుల డైరెక్టరీ” ఎంచుకోండి.
- “వనరుల రకం” డ్రాప్డౌన్ తెరిచి “మెను” ఎంచుకోండి.
- “డైరెక్టరీ పేరు” స్వయంచాలకంగా “మెను” కి నవీకరించబడాలి, కాని అది కాకపోతే మీరు దాన్ని మాన్యువల్గా పేరు మార్చాలి.
- “సరే” క్లిక్ చేయండి.
మీరు ఇప్పుడు మెను వనరు ఫైల్ను సృష్టించడానికి సిద్ధంగా ఉన్నారు:
- మీ ప్రాజెక్ట్ యొక్క “మెను” డైరెక్టరీని నియంత్రించండి మరియు “క్రొత్త> మెనూ వనరుల ఫైల్” ఎంచుకోండి.
- ఈ ఫైల్కు “my_menu” అని పేరు పెట్టండి.
- “సరే” క్లిక్ చేయండి.
- “My_menu.xml” ఫైల్ను తెరిచి, కింది వాటిని జోడించండి:
మెను ఫైల్ “action_gallery” స్ట్రింగ్ను సూచిస్తుంది, కాబట్టి మీ ప్రాజెక్ట్ యొక్క res / values / strings.xml ఫైల్ను తెరిచి ఈ వనరును సృష్టించండి. నేను ఇక్కడ ఉన్నప్పుడు, ఈ ప్రాజెక్ట్ అంతటా మేము ఉపయోగిస్తున్న ఇతర తీగలను కూడా నిర్వచించాను.
తరువాత, యాక్షన్ బార్ యొక్క “ic_gallery” చిహ్నాన్ని సృష్టించడానికి ఇమేజ్ అసెట్ స్టూడియోని ఉపయోగించండి:
- “ఫైల్> క్రొత్త> చిత్ర ఆస్తి” ఎంచుకోండి.
- “ఐకాన్ రకం” డ్రాప్డౌన్ను “యాక్షన్ బార్ మరియు టాబ్ చిహ్నాలు” గా సెట్ చేయండి.
- “క్లిప్ ఆర్ట్” బటన్ క్లిక్ చేయండి.
- డ్రా చేయదగినదాన్ని ఎంచుకోండి; నేను “చిత్రం” ఉపయోగిస్తున్నాను.
- “సరే” క్లిక్ చేయండి.
- యాక్షన్ బార్లో ఈ చిహ్నం స్పష్టంగా కనబడుతుందని నిర్ధారించుకోవడానికి, “థీమ్” డ్రాప్డౌన్ తెరిచి “HOLO_DARK” ఎంచుకోండి.
- ఈ చిహ్నానికి “ic_gallery” అని పేరు పెట్టండి.
- “తదుపరి” క్లిక్ చేసి, ఆపై “ముగించు” క్లిక్ చేయండి.
అనుమతి అభ్యర్థనలను నిర్వహించడం మరియు ఈవెంట్లను క్లిక్ చేయండి
టెక్స్ట్ రికగ్నిషన్ API కి నేరుగా సంబంధం లేని అన్ని పనులను నేను ప్రత్యేక బేస్ యాక్టివిటీ క్లాస్లో చేయబోతున్నాను, వీటిలో మెనుని తక్షణం చేయడం, యాక్షన్ బార్ క్లిక్ ఈవెంట్లను నిర్వహించడం మరియు పరికరం నిల్వకు ప్రాప్యత అభ్యర్థించడం.
- Android స్టూడియో టూల్ బార్ నుండి “ఫైల్> క్రొత్త> జావా క్లాస్” ఎంచుకోండి.
- ఈ తరగతికి “బేస్ఆక్టివిటీ” అని పేరు పెట్టండి.
- “సరే” క్లిక్ చేయండి.
- బేస్ఆక్టివిటీని తెరిచి, కింది వాటిని జోడించండి:
android.app.Activity దిగుమతి; android.support.v4.app.ActivityCompat ను దిగుమతి చేయండి; android.support.v7.app.ActionBar దిగుమతి; android.support.v7.app.AlertDialog; android.support.v7.app.AppCompatActivity దిగుమతి; android.os.Bundle దిగుమతి; android.content.DialogInterface దిగుమతి; android.content.Intent దిగుమతి; android.Manifest దిగుమతి; android.provider.MediaStore దిగుమతి; android.view.Menu దిగుమతి; android.view.MenuItem దిగుమతి; android.content.pm.PackageManager దిగుమతి; android.net.Uri దిగుమతి; android.provider.Settings దిగుమతి; android.support.annotation.NonNull దిగుమతి; android.support.annotation.Nullable; దిగుమతి java.io.File; పబ్లిక్ క్లాస్ బేస్ఆక్టివిటీ AppCompatActivity ని విస్తరిస్తుంది {పబ్లిక్ స్టాటిక్ ఫైనల్ Int WRITE_STORAGE = 100; పబ్లిక్ స్టాటిక్ ఫైనల్ Int SELECT_PHOTO = 102; పబ్లిక్ స్టాటిక్ ఫైనల్ స్ట్రింగ్ ACTION_BAR_TITLE = "action_bar_title"; పబ్లిక్ ఫైల్ ఫోటో; Ver ఓవర్రైడ్ రక్షిత శూన్యత ఆన్క్రియేట్ (ulla నబుల్ బండిల్ సేవ్ఇన్స్టాన్స్స్టేట్) {super.onCreate (saveInstanceState); యాక్షన్ బార్ యాక్షన్ బార్ = getSupportActionBar (); if (actionBar! = null) {actionBar.setDisplayHomeAsUpEnabled (true); actionBar.setTitle (getIntent () getStringExtra (ACTION_BAR_TITLE).); Create public పబ్లిక్ బూలియన్ ఆన్క్రియేట్ఆప్షన్మెను (మెనూ మెనూ) {getMenuInflater (). పెంచి (R.menu.my_menu, మెను); నిజమైన తిరిగి; Public public పబ్లిక్ బూలియన్ onOptionsItemSelected (మెనూఇటెమ్ ఐటెమ్) {స్విచ్ (item.getItemId ()) {// “గ్యాలరీ_యాక్షన్” ఎంచుకోబడితే, అప్పుడు ... // కేసు R.id.gallery_action: //... తనిఖీ చేయండి WRITE_STORAGE అనుమతి // చెక్పెర్మిషన్ (WRITE_STORAGE); బ్రేక్; super రిటర్న్ super.onOptionsItemSelected (అంశం); RequRequestPermissionsResult (int requestCode, onNonNull స్ట్రింగ్ అనుమతులు, onNonNull int grantResults) {super.onRequestPermissionsResult (requestCode, permissions, grantResults); స్విచ్ (requestCode) {కేసు WRITE_STORAGE: // అనుమతి అభ్యర్థన మంజూరు చేయబడితే, ... // if (grantResults.length> 0 && grantResults == PackageManager.PERMISSION_GRANTED) {//...కాల్ సెలెక్ట్ పిక్చర్ // సెలెక్ట్ పిక్చర్ ( ); // అనుమతి అభ్యర్థన తిరస్కరించబడితే, అప్పుడు ... //} else {//... “అనుమతి_ అభ్యర్థన” స్ట్రింగ్ // requestPermission (ఇది, requestCode, R.string.permission_request) ప్రదర్శించు; } విరామం; Request} // అనుమతి అభ్యర్థన డైలాగ్ను ప్రదర్శించు // పబ్లిక్ స్టాటిక్ శూన్య అభ్యర్థన అనుమతి (తుది కార్యాచరణ కార్యాచరణ, తుది పూర్ణాంక అభ్యర్థన కోడ్, పూర్ణాంక msg) {హెచ్చరిక డైలాగ్.బిల్డర్ హెచ్చరిక = క్రొత్త హెచ్చరిక డైలాగ్.బిల్డర్ (కార్యాచరణ); alert.set (MSG); alert.setPositiveButton (android.R.string.ok, new DialogInterface.OnClickListener) .setData (Uri.parse ("ప్యాకేజీ:" + activity.getPackageName ()); activity.startActivityForResult (permissonIntent, requestCode);}}); alert.setNegativeButton (android.R.string.cancel, new DialogInterface.OnClickListener) alert.setCancelable (తప్పుడు); alert.show (); } // వినియోగదారు WRITE_STORAGE అనుమతిని మంజూరు చేశారో లేదో తనిఖీ చేయండి // పబ్లిక్ శూన్యమైన చెక్పెర్మిషన్ (పూర్ణాంక అభ్యర్థన కోడ్) {స్విచ్ (రిక్వెస్ట్కోడ్) {కేసు WRITE_STORAGE: int hasWriteExternalStoragePermission = ActivityCompat.checkSelfPermission (ఇది, మానిఫెస్ట్.పెర్మిషన్. WRITE_ST) // మనకు బాహ్య నిల్వకు ప్రాప్యత ఉంటే ... // if (hasWriteExternalStoragePermission == PackageManager.PERMISSION_GRANTED) {//...కాల్ సెలెక్ట్ పిక్చర్, ఇది వినియోగదారు ఒక చిత్రాన్ని ఎంచుకోగల కార్యాచరణను ప్రారంభిస్తుంది // selectPictures (); // అనుమతి మంజూరు చేయకపోతే, ... //} else {//... అనుమతి కోరండి // ActivityCompat.requestPermissions (ఇది, కొత్త స్ట్రింగ్ {Manifest.permission.WRITE_EXTERNAL_STORAGE request, requestCode); } విరామం; v} ప్రైవేట్ శూన్య ఎంపిక పిక్చర్ () {ఫోటో = MyHelper.createTempFile (ఫోటో); ఉద్దేశం ఉద్దేశం = క్రొత్త ఉద్దేశం (ఉద్దేశం. ACTION_PICK, మీడియాస్టోర్.ఇమేజెస్.మీడియా. EXTERNAL_CONTENT_URI); // వినియోగదారుడు చిత్రాన్ని ఎంచుకోగల కార్యాచరణను ప్రారంభించండి // startActivityForResult (ఉద్దేశం, SELECT_PHOTO); }}
ఈ సమయంలో, మీ ప్రాజెక్ట్ MyHelper.createTempFile ని పరిష్కరించలేమని ఫిర్యాదు చేయాలి. ఇప్పుడే దీన్ని అమలు చేద్దాం!
CreateTempFile తో చిత్రాల పరిమాణాన్ని మార్చడం
క్రొత్త “MyHelper” తరగతిని సృష్టించండి. ఈ తరగతిలో, మేము టెక్స్ట్ రికగ్నిషన్ API చేత ప్రాసెస్ చేయడానికి సిద్ధంగా ఉన్న యూజర్ ఎంచుకున్న చిత్రాన్ని పున ize పరిమాణం చేయబోతున్నాము.
android.graphics.Bitmap దిగుమతి; android.graphics.BitmapFactory దిగుమతి; android.content.Context దిగుమతి; android.database.Cursor దిగుమతి; android.os.En Environment; android.widget.ImageView దిగుమతి; android.provider.MediaStore దిగుమతి; android.net.Uri దిగుమతి; స్టాటిక్ android.graphics.BitmapFactory.decodeFile ను దిగుమతి చేయండి; స్టాటిక్ android.graphics.BitmapFactory.decodeStream ను దిగుమతి చేయండి; దిగుమతి java.io.File; దిగుమతి java.io.FileNotFoundException; దిగుమతి java.io.FileOutputStream; దిగుమతి java.io.IOException; పబ్లిక్ క్లాస్ మైహెల్పర్ {పబ్లిక్ స్టాటిక్ స్ట్రింగ్ గెట్పాత్ (సందర్భ సందర్భం, ఉరి ఉరి) {స్ట్రింగ్ మార్గం = ""; స్ట్రింగ్ ప్రొజెక్షన్ = {మీడియాస్టోర్.ఇమేజెస్.మీడియా.డేటా}; కర్సర్ కర్సర్ = context.getContentResolver (). ప్రశ్న (యూరి, ప్రొజెక్షన్, శూన్య, శూన్య, శూన్య); పూర్ణాంక కాలమ్_ఇండెక్స్; if (కర్సర్! = శూన్య) {column_index = cursor.getColumnIndexOrThrow (MediaStore.Images.Media.DATA); cursor.moveToFirst (); path = cursor.getString (column_index); cursor.close (); } తిరిగి వచ్చే మార్గం; } పబ్లిక్ స్టాటిక్ ఫైల్ క్రియేట్ టెంప్ ఫైల్ (ఫైల్ ఫైల్) {ఫైల్ డైరెక్టరీ = కొత్త ఫైల్ (Environment.getExternalStorageDirectory (). getPath () + "/com.jessicathornsby.myapplication"); if (! directory.exists () ||! directory.isDirectory ()) {directory.mkdirs (); } if (file == null) {file = new file (డైరెక్టరీ, "orig.jpg"); } రిటర్న్ ఫైల్; } పబ్లిక్ స్టాటిక్ బిట్మ్యాప్ పున ize పరిమాణం ఫోటో (ఫైల్ ఇమేజ్ ఫైల్, కాంటెక్స్ట్ కాంటెక్స్ట్, ఉరి యూరి, ఇమేజ్వ్యూ వ్యూ) {బిట్మ్యాప్ఫ్యాక్టరీ.ఆప్షన్స్ న్యూఆప్షన్స్ = కొత్త బిట్మ్యాప్ఫ్యాక్టరీ.ఆప్షన్స్ (); {decodeStream (context.getContentResolver () ను ప్రయత్నించండి. ఓపెన్ఇన్పుట్ స్ట్రీమ్ (యూరి), శూన్య, క్రొత్త ఎంపికలు); int photoHeight = newOptions.outHeight; int photoWidth = newOptions.outWidth; newOptions.inSampleSize = Math.min (photoWidth / view.getWidth (), photoHeight / view.getHeight ()); రిటర్న్ కంప్రెస్ఫోటో (ఇమేజ్ఫైల్, బిట్మ్యాప్ఫ్యాక్టరీ.డెకోడ్ స్ట్రీమ్ (context.getContentResolver (). ఓపెన్ఇన్పుట్ స్ట్రీమ్ (యూరి), శూన్య, కొత్త ఎంపికలు)); } క్యాచ్ (ఫైల్నోట్ఫౌండ్ఎక్సెప్షన్ మినహాయింపు) {exception.printStackTrace (); తిరిగి శూన్య; }} పబ్లిక్ స్టాటిక్ బిట్మ్యాప్ పున ize పరిమాణం ఫోటో (ఫైల్ ఇమేజ్ ఫైల్, స్ట్రింగ్ పాత్, ఇమేజ్వ్యూ వ్యూ) {బిట్మ్యాప్ఫ్యాక్టరీ.ఆప్షన్స్ ఆప్షన్స్ = కొత్త బిట్మ్యాప్ఫ్యాక్టరీ.ఆప్షన్స్ (); డీకోడ్ ఫైల్ (మార్గం, ఎంపికలు); int photoHeight = options.outHeight; int ఫోటోవిడ్త్ = options.outWidth; options.inSampleSize = Math.min (photoWidth / view.getWidth (), photoHeight / view.getHeight ()); రిటర్న్ కంప్రెస్ ఫోటో (ఇమేజ్ ఫైల్, బిట్మాప్ఫ్యాక్టరీ.డెకోడ్ ఫైల్ (మార్గం, ఎంపికలు)); stat ప్రైవేట్ స్టాటిక్ బిట్మ్యాప్ కంప్రెస్ ఫోటో (ఫైల్ ఫోటోఫైల్, బిట్మ్యాప్ బిట్మ్యాప్) {ప్రయత్నించండి {ఫైల్ ut ట్పుట్ స్ట్రీమ్ fOutput = కొత్త ఫైల్ ut ట్పుట్ స్ట్రీమ్ (ఫోటోఫైల్); bitmap.compress (Bitmap.CompressFormat.JPEG, 70, fOutput); fOutput.close (); } క్యాచ్ (IOException మినహాయింపు) {exception.printStackTrace (); } రిటర్న్ బిట్మ్యాప్; }}
చిత్రాన్ని చిత్ర వీక్షణకు సెట్ చేయండి
తరువాత, మేము మా మెయిన్ఆక్టివిటీ క్లాస్లో ఆన్ యాక్టివిటీ రిసల్ట్ () ను అమలు చేయాలి మరియు యూజర్ ఎంచుకున్న చిత్రాన్ని మా ఇమేజ్వ్యూకు సెట్ చేయాలి.
android.graphics.Bitmap దిగుమతి; android.os.Bundle దిగుమతి; android.widget.ImageView దిగుమతి; android.content.Intent దిగుమతి; android.widget.TextView దిగుమతి; android.net.Uri దిగుమతి; పబ్లిక్ క్లాస్ మెయిన్ఆక్టివిటీ బేస్ యాక్టివిటీని విస్తరిస్తుంది {ప్రైవేట్ బిట్మ్యాప్ మైబిట్మ్యాప్; ప్రైవేట్ ఇమేజ్ వ్యూ myImageView; ప్రైవేట్ టెక్స్ట్ వ్యూ myTextView; Ver ఓవర్రైడ్ రక్షిత శూన్యత ఆన్క్రియేట్ (బండిల్ సేవ్ఇన్స్టాన్స్స్టేట్) {super.onCreate (saveInstanceState); setContentView (R.layout.activity_main); myTextView = findViewById (R.id.textView); myImageView = findViewById (R.id.imageView); Activity యాక్టివిటీ రిసల్ట్ (Int requestCode, int resultCode, Intent data) {super.onActivityResult (requestCode, resultCode, data); if (resultCode == RESULT_OK) {స్విచ్ (requestCode) {కేసు WRITE_STORAGE: చెక్పెర్మిషన్ (requestCode); బ్రేక్; కేసు SELECT_PHOTO: Uri dataUri = data.getData (); స్ట్రింగ్ మార్గం = MyHelper.getPath (ఇది, డేటాయూరి); if (path == null) {myBitmap = MyHelper.resizePhoto (ఫోటో, ఇది, డేటాయూరి, myImageView); } else {myBitmap = MyHelper.resizePhoto (ఫోటో, మార్గం, myImageView); } if (myBitmap! = null) {myTextView.setText (శూన్య); myImageView.setImageBitmap (myBitmap); } విరామం; }}}}
ఈ ప్రాజెక్ట్ను భౌతిక Android పరికరం లేదా AVD లో అమలు చేయండి మరియు యాక్షన్ బార్ చిహ్నాన్ని క్లిక్ చేయండి. ప్రాంప్ట్ చేసినప్పుడు, WRITE_STORAGE అనుమతి ఇవ్వండి మరియు గ్యాలరీ నుండి చిత్రాన్ని ఎంచుకోండి; ఈ చిత్రం ఇప్పుడు మీ అనువర్తనం యొక్క UI లో ప్రదర్శించబడుతుంది.
ఇప్పుడు మేము పునాది వేసుకున్నాము, కొంత వచనాన్ని సేకరించడం ప్రారంభించడానికి మేము సిద్ధంగా ఉన్నాము!
వచనాన్ని గుర్తించడానికి అనువర్తనాన్ని బోధిస్తోంది
క్లిక్ ఈవెంట్కు ప్రతిస్పందనగా నేను టెక్స్ట్ గుర్తింపును ప్రేరేపించాలనుకుంటున్నాను, కాబట్టి మేము OnClickListener ని అమలు చేయాలి:
android.graphics.Bitmap దిగుమతి; android.os.Bundle దిగుమతి; android.widget.ImageView దిగుమతి; android.content.Intent దిగుమతి; android.widget.TextView దిగుమతి; android.view.View దిగుమతి; android.net.Uri దిగుమతి; పబ్లిక్ క్లాస్ మెయిన్ఆక్టివిటీ బేస్ యాక్టివిటీని విస్తరిస్తుంది వీక్షణ.ఒన్క్లిక్లిస్టెనర్ {ప్రైవేట్ బిట్మ్యాప్ మైబిట్మ్యాప్; ప్రైవేట్ ఇమేజ్ వ్యూ myImageView; ప్రైవేట్ టెక్స్ట్ వ్యూ myTextView; Ver ఓవర్రైడ్ రక్షిత శూన్యత ఆన్క్రియేట్ (బండిల్ సేవ్ఇన్స్టాన్స్స్టేట్) {super.onCreate (saveInstanceState); setContentView (R.layout.activity_main); myTextView = findViewById (R.id.textView); myImageView = findViewById (R.id.imageView); findViewByID (R.id.checkText) .setOnClickListener (ఈ); Public public పబ్లిక్ శూన్యత ఆన్క్రిక్ క్లిక్ చేయండి (వీక్షణ చూడండి) {స్విచ్ (view.getId ()) {కేసు R.id.checkText: if (myBitmap! = Null) {// మేము తరువాతి దశలో రన్టెక్స్ట్రెకాగ్ను అమలు చేస్తాము // runTextRecog (); } విరామం; }}
ML కిట్ చిత్రాలు ఫైర్బేస్విజన్ ఇమేజ్ ఆకృతిలో ఉన్నప్పుడు మాత్రమే వాటిని ప్రాసెస్ చేయగలవు, కాబట్టి మన చిత్రాన్ని ఫైర్బేస్విజన్ ఇమేజ్ ఆబ్జెక్ట్గా మార్చాలి. మీరు బిట్మ్యాప్, మీడియా నుండి ఫైర్బేస్విజన్ ఇమేజ్ను సృష్టించవచ్చు.ఇమేజ్, బైట్ బఫర్ లేదా బైట్ శ్రేణి. మేము బిట్మ్యాప్లతో పని చేస్తున్నందున, మేము ఫైర్బేస్విజన్ ఇమేజ్ క్లాస్ యొక్క బిట్మ్యాప్ () యుటిలిటీ పద్ధతిని పిలవాలి మరియు దానిని మా బిట్మ్యాప్లోకి పంపాలి.
ప్రైవేట్ శూన్యత రన్టెక్స్ట్రెకాగ్ () {ఫైర్బేస్విజన్ ఇమేజ్ ఇమేజ్ = ఫైర్బేస్విజన్ఇమేజ్.ఫ్రోమ్బిట్మ్యాప్ (మైబిట్మ్యాప్);
ML కిట్ దాని ప్రతి ఇమేజ్ రికగ్నిషన్ ఆపరేషన్లకు వేర్వేరు డిటెక్టర్ తరగతులను కలిగి ఉంది. టెక్స్ట్ కోసం, మనం ఫైర్బేస్విజన్ టెక్స్ట్డెక్టర్ క్లాస్ను ఉపయోగించాలి, ఇది చిత్రంపై ఆప్టికల్ క్యారెక్టర్ రికగ్నిషన్ (OCR) ను చేస్తుంది.
GetVisionTextDetector ను ఉపయోగించి మేము ఫైర్బేస్విజన్ టెక్స్ట్డెక్టర్ యొక్క ఉదాహరణను సృష్టిస్తాము:
ఫైర్బేస్విజన్ టెక్స్ట్డెక్టర్ డిటెక్టర్ = ఫైర్బేస్విజన్.జెట్ఇన్స్టాన్స్ (). GetVisionTextDetector ();
తరువాత, డిటెక్ట్ఇన్ఇమేజ్ () పద్ధతిని పిలిచి, ఫైర్బేస్విజన్ ఇమేజ్ ఆబ్జెక్ట్ను పాస్ చేయడం ద్వారా టెక్స్ట్ కోసం ఫైర్బేస్విజన్ ఇమేజ్ను తనిఖీ చేయాలి. మేము ఆన్ సక్సెస్ మరియు ఆన్ ఫెయిల్యూర్ బ్యాక్బ్యాక్లను కూడా అమలు చేయాలి మరియు సంబంధిత శ్రోతలు కాబట్టి ఫలితాలు అందుబాటులోకి వచ్చినప్పుడల్లా మా అనువర్తనం తెలియజేయబడుతుంది.
detor.detectInImage (చిత్రం) .addOnSuccessListener (క్రొత్త OnSuccessListener ఈ ఆపరేషన్ విఫలమైతే, నేను ఒక అభినందించి త్రాగుటను ప్రదర్శించబోతున్నాను, కానీ ఆపరేషన్ విజయవంతమైతే నేను ప్రతిస్పందనతో ప్రాసెస్ ఎక్స్ట్రాక్టెడ్ టెక్స్ట్ అని పిలుస్తాను. ఈ సమయంలో, నా టెక్స్ట్ డిటెక్షన్ కోడ్ ఇలా ఉంది: // ఫైర్బేస్విజన్ ఇమేజ్ని సృష్టించండి // ప్రైవేట్ శూన్యత రన్టెక్స్ట్రెకోగ్ () {ఫైర్బేస్విజన్ ఇమేజ్ ఇమేజ్ = ఫైర్బేస్విజన్ఇమేజ్.ఫ్రోమ్బిట్మ్యాప్ (మైబిట్మ్యాప్); // ఫైర్బేస్విజన్ విజన్క్లౌడ్టెక్స్ట్డెక్టర్ యొక్క ఉదాహరణను సృష్టించండి // ఫైర్బేస్విజన్ విజన్టెక్స్ట్ డిటెక్టర్ డిటెక్టర్ = ఫైర్బేస్విజన్.జెట్ఇన్స్టాన్స్ (). // OnSuccessListener ని నమోదు చేయండి // detter.detectInImage (చిత్రం) .addOnSuccessListener (క్రొత్త OnSuccessListener మా అనువర్తనం ఆన్సక్సెస్ నోటిఫికేషన్ను అందుకున్నప్పుడల్లా, మేము ఫలితాలను అన్వయించాలి. ఫైర్బేస్విజన్ టెక్స్ట్ ఆబ్జెక్ట్ అంశాలు, పంక్తులు మరియు బ్లాక్లను కలిగి ఉంటుంది, ఇక్కడ ప్రతి బ్లాక్ సాధారణంగా టెక్స్ట్ యొక్క ఒకే పేరాకు సమానం. ఫైర్బేస్విజన్ టెక్స్ట్ 0 బ్లాక్లను తిరిగి ఇస్తే, అప్పుడు మేము “నో_టెక్స్ట్” స్ట్రింగ్ను ప్రదర్శిస్తాము, కానీ అది ఒకటి లేదా అంతకంటే ఎక్కువ బ్లాక్లను కలిగి ఉంటే, అప్పుడు మేము మా టెక్స్ట్ వ్యూలో భాగంగా తిరిగి పొందిన వచనాన్ని ప్రదర్శిస్తాము. ప్రైవేట్ శూన్య ప్రక్రియఎక్స్ట్రాక్టెడ్ టెక్స్ట్ (ఫైర్బేస్విజన్ టెక్స్ట్ ఫైర్బేస్విజన్ టెక్స్ట్) {myTextView.setText (శూన్య); if (firebaseVisionText.getBlocks (). పరిమాణం () == 0) {myTextView.setText (R.string.no_text); తిరిగి; } for (FirebaseVisionText.Block block: firebaseVisionText.getBlocks ()) {myTextView.append (block.getText ()); }}} పూర్తయిన మెయిన్ యాక్టివిటీ కోడ్ ఇక్కడ ఉంది: android.graphics.Bitmap దిగుమతి; android.os.Bundle దిగుమతి; android.widget.ImageView దిగుమతి; android.content.Intent దిగుమతి; android.widget.TextView దిగుమతి; android.widget.Toast దిగుమతి; android.view.View దిగుమతి; android.net.Uri దిగుమతి; android.support.annotation.NonNull దిగుమతి; దిగుమతి com.google.firebase.ml.vision.common.FirebaseVisionImage; దిగుమతి com.google.firebase.ml.vision.text.FirebaseVisionText; దిగుమతి com.google.firebase.ml.vision.text.FirebaseVisionTextDetector; దిగుమతి com.google.firebase.ml.vision.FirebaseVision; దిగుమతి com.google.android.gms.tasks.OnSuccessListener; దిగుమతి com.google.android.gms.tasks.OnFailureListener; పబ్లిక్ క్లాస్ మెయిన్ఆక్టివిటీ బేస్ యాక్టివిటీని విస్తరిస్తుంది వీక్షణ.ఒన్క్లిక్లిస్టెనర్ {ప్రైవేట్ బిట్మ్యాప్ మైబిట్మ్యాప్; ప్రైవేట్ ఇమేజ్ వ్యూ myImageView; ప్రైవేట్ టెక్స్ట్ వ్యూ myTextView; Ver ఓవర్రైడ్ రక్షిత శూన్యత ఆన్క్రియేట్ (బండిల్ సేవ్ఇన్స్టాన్స్స్టేట్) {super.onCreate (saveInstanceState); setContentView (R.layout.activity_main); myTextView = findViewById (R.id.textView); myImageView = findViewById (R.id.imageView); findViewByID (R.id.checkText) .setOnClickListener (ఈ); Public public పబ్లిక్ శూన్యతపై క్లిక్ చేయండి (వీక్షణను వీక్షించండి) {స్విచ్ (view.getId ()) {కేసు R.id.checkText: if (myBitmap! = Null) {runTextRecog (); } విరామం; Activity ver ఓవర్రైడ్ రక్షిత శూన్యత ఆన్ యాక్టివిటీ రిసల్ట్ (Int requestCode, int resultCode, Intent data) {super.onActivityResult (requestCode, resultCode, data); if (resultCode == RESULT_OK) {స్విచ్ (requestCode) {కేసు WRITE_STORAGE: చెక్పెర్మిషన్ (requestCode); బ్రేక్; కేసు SELECT_PHOTO: Uri dataUri = data.getData (); స్ట్రింగ్ మార్గం = MyHelper.getPath (ఇది, డేటాయూరి); if (path == null) {myBitmap = MyHelper.resizePhoto (ఫోటో, ఇది, డేటాయూరి, myImageView); } else {myBitmap = MyHelper.resizePhoto (ఫోటో, మార్గం, myImageView); } if (myBitmap! = null) {myTextView.setText (శూన్య); myImageView.setImageBitmap (myBitmap); } విరామం; v}} ప్రైవేట్ శూన్యత రన్టెక్స్ట్రెకోగ్ () {ఫైర్బేస్విజన్ ఇమేజ్ ఇమేజ్ = ఫైర్బేస్విజన్ఇమేజ్.ఫ్రోమ్బిట్మ్యాప్ (మైబిట్మ్యాప్); ఫైర్బేస్విజన్ టెక్స్ట్డెక్టర్ డిటెక్టర్ = ఫైర్బేస్విజన్.జెట్ఇన్స్టాన్స్ (). GetVisionTextDetector (); detor.detectInImage (చిత్రం) .addOnSuccessListener (క్రొత్త OnSuccessListener ఇప్పుడు ML కిట్ యొక్క టెక్స్ట్ రికగ్నిషన్ చర్యలో చూడటానికి సమయం ఆసన్నమైంది! ఈ పరికరాన్ని Android పరికరం లేదా AVD లో ఇన్స్టాల్ చేయండి, గ్యాలరీ నుండి ఒక చిత్రాన్ని ఎంచుకోండి, ఆపై “వచనాన్ని తనిఖీ చేయండి” బటన్ను నొక్కండి. అనువర్తనం చిత్రం నుండి అన్ని వచనాన్ని సంగ్రహించి, ఆపై టెక్స్ట్ వ్యూలో ప్రదర్శించడం ద్వారా ప్రతిస్పందించాలి. మీ చిత్రం యొక్క పరిమాణం మరియు దానిలో ఉన్న టెక్స్ట్ మొత్తాన్ని బట్టి, సేకరించిన అన్ని వచనాలను చూడటానికి మీరు స్క్రోల్ చేయాల్సి ఉంటుందని గమనించండి. మీరు పూర్తి చేసిన ప్రాజెక్ట్ను గిట్హబ్ నుండి డౌన్లోడ్ చేసుకోవచ్చు. ML కిట్ను ఉపయోగించి చిత్రం నుండి వచనాన్ని ఎలా గుర్తించాలో మరియు సేకరించాలో మీకు ఇప్పుడు తెలుసు. టెక్స్ట్ రికగ్నిషన్ API ML కిట్ యొక్క ఒక భాగం. ఈ SDK బార్కోడ్ స్కానింగ్, ఫేస్ డిటెక్షన్, ఇమేజ్ లేబులింగ్ మరియు ల్యాండ్మార్క్ గుర్తింపును కూడా అందిస్తుంది, స్మార్ట్ రిప్లై మరియు అధిక-సాంద్రత కలిగిన ముఖ ఆకృతి API తో సహా సాధారణ మొబైల్ వినియోగ కేసుల కోసం మరిన్ని API లను జోడించే ప్రణాళికలతో. ఏ ML కిట్ API ను మీరు ప్రయత్నించడానికి ఎక్కువ ఆసక్తి కలిగి ఉన్నారు? దిగువ వ్యాఖ్యలలో మాకు తెలియజేయండి!ప్రాజెక్ట్ను పరీక్షిస్తోంది
చుట్టి వేయు