You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
IoT-For-Beginners/translations/km/4-manufacturing/lessons/2-check-fruit-from-device/single-board-computer-class...

8.5 KiB

ចែកចាត់រូបភាព - សម្ភារៈ IoT យ៉ាងពិត និង Raspberry Pi

នៅផ្នែកនេះនៃមេរៀន អ្នកនឹងផ្ញើរូបភាពដែលបានចាប់យកដោយកាមេរ៉ាទៅកាន់សេវាកម្ម Custom Vision ដើម្បីចែកចាត់វា។

ផ្ញើរូបភាពទៅ Custom Vision

សេវាកម្ម Custom Vision មាន Python SDK ដែលអ្នកអាចប្រើដើម្បីចែកចាត់រូបភាព។

បំណងការ - ផ្ញើរូបភាពទៅ Custom Vision

  1. បើកថត fruit-quality-detector នៅក្នុង VS Code។ ប្រសិនបើអ្នកកំពុងប្រើឧបករណ៍ IoT លើកំណត់ សូមប្រាកដថាបរិយាគន្លងនោះកំពុងរត់នៅក្នុង terminal។

  2. Python SDK សម្រាប់ផ្ញើរូបភាពទៅ Custom Vision មាននៅជាបណ្ណាល័យ Pip package។ ដំឡើងវាជាមួយពាក្យបញ្ជាតទៅខាងក្រោម៖

    pip3 install azure-cognitiveservices-vision-customvision
    
  3. បន្ថែមប្រកាស import ខាងក្រោមនៅផ្នែកលើបន្ទាត់ក្នុងឯកសារ app.py

    from msrest.authentication import ApiKeyCredentials
    from azure.cognitiveservices.vision.customvision.prediction import CustomVisionPredictionClient
    

    នេះនាំមូលដ្ឋានមកពីមូឌុលនៅក្នុងបណ្ណាល័យ Custom Vision មួយសម្រាប់ផ្ទៀងផ្ទាត់ជាមួយ key នៃការព្យាករណ៍ ហើយមួយសម្រាប់ផ្តល់ថ្នាក់ client ដែលអាចហៅ Custom Vision។

  4. បន្ថែមកូដខាងក្រោមនៅចុងឯកសារ៖

    prediction_url = '<prediction_url>'
    prediction_key = '<prediction key>'
    

    ជំនួស <prediction_url> ជាមួយ URL ដែលអ្នកបានចម្លងពីប្រអប់សន្ទនា Prediction URL មុននេះ ក្នុងមេរៀននេះ។ ជំនួស <prediction key> ជាមួយ key នៃការព្យាករណ៍ដែលអ្នកបានចម្លងពីប្រអប់សន្ទនានោះដែរ។

  5. URL នៃការព្យាករណ៍ដែលបានផ្តល់ដោយប្រអប់សន្ទនា Prediction URL ត្រូវបានរចនារួចសម្រាប់ប្រើនៅពេលហៅឆានែល REST ពីផ្ទាល់។ Python SDK ប្រើផ្នែកខុសៗគ្នានៃ URL ខ្លួននៅកន្លែងផ្សេងៗ។ បន្ថែមកូដខាងក្រោមដើម្បីបំបែក URL នេះចេញជាពីរសំណុំ​ដែលត្រូវការ៖

    parts = prediction_url.split('/')
    endpoint = 'https://' + parts[2]
    project_id = parts[6]
    iteration_name = parts[9]
    

    នេះបំបែក URL ដក endpoint ដែលជា https://<location>.api.cognitive.microsoft.com មួយ project ID និងឈ្មោះនៃ iteration ដែលបានផ្សាយ។

  6. បង្កើតឧបករណ៍ predictor ដើម្បីអនុវត្តការព្យាករណ៍ជាមួយកូដខាងក្រោម៖

    prediction_credentials = ApiKeyCredentials(in_headers={"Prediction-key": prediction_key})
    predictor = CustomVisionPredictionClient(endpoint, prediction_credentials)
    

    prediction_credentials បំពាក់ key នៃការព្យាករណ៍។ ពួកវាត្រូវបានប្រើដើម្បីបង្កើត client នៃការព្យាករណ៍ដែលបញ្ចូនទៅ endpoint ។

  7. ផ្ញើរូបភាពទៅ custom vision ដោយប្រើកូដខាងក្រោម៖

    image.seek(0)
    results = predictor.classify_image(project_id, iteration_name, image)
    

    នេះសម្អាតរូបភាពឲ្យទៅចាប់ផ្តើមម្តងទៀត ហើយបញ្ជូនវាទៅ client នៃការព្យាករណ៍។

  8. ចុងក្រោយ បង្ហាញលទ្ធផលជាមួយកូដខាងក្រោម៖

    for prediction in results.predictions:
        print(f'{prediction.tag_name}:\t{prediction.probability * 100:.2f}%')
    

    នេះនឹងរំកិលតាមការព្យាករណ៍ទាំងអស់ដែលត្រូវបានត្រឡប់មក ហើយបង្ហាញពួកវានៅលើ terminal។ ប្រូបាបាលរបស់ពួកវាត្រឡប់ទៅជាចំនួនចុះចុះពី 0-1, ដែល 0 មានន័យថាមានឱកាស 0% ក្នុងការផ្គូរផ្គងនឹងស្លាក និង 1 មានន័យថា 100% ។

    💁 អ្នកចាត់ថ្នាក់រូបភាពនឹងបង្ហាញភាគរយសម្រាប់ស្លាកទាំងអស់ដែលត្រូវបានប្រើ។ ស្លាកមួយនីមួយៗនឹងមានប្រូបាបាលថារូបភាពផ្គូរផ្គងនឹងស្លាកនោះ។

  9. ប្រតិបត្ដិកូដរបស់អ្នក ដោយឲ្យកាមេរ៉ារបស់អ្នកបង្ហាញទៅលើផ្លែឈើមួយ ឬជាសំណុំរូបភាពសមរម្យ ឬផ្លែឈើដែលអាចមើលឃើញតាម webcam ប្រសិនបើប្រើ hardware IoT ពិតប្រាកដ។ អ្នកនឹងឃើញលទ្ធផលនៅក្នុង console៖

    (.venv) ➜  fruit-quality-detector python app.py
    ripe:   56.84%
    unripe: 43.16%
    

    អ្នកនឹងអាចមើលឃើញរូបភាពដែលបានថត និងតម្លៃទាំងនេះនៅក្នុងផ្ទាំង Predictions នៅក្នុង Custom Vision ។

    A banana in custom vision predicted ripe at 56.8% and unripe at 43.1%

💁 អ្នកអាចស្វែងរកកូដនេះនៅក្នុងថត code-classify/picode-classify/virtual-iot-device

😀 កម្មវិធីចាត់ថ្នាក់គុណភាពផ្លែឈើរបស់អ្នកបានជោគជ័យ!


ការបញ្ជាក់
ឯកសារនេះត្រូវបានបកប្រែដោយប្រើសេវាបកប្រែ AI Co-op Translator។ បើទោះបីយើងខិតខំប្រឹងប្រែងក្នុងការធានានូវភាពត្រឹមត្រូវ ក៏សូមយល់ពីការប្រែសម្រួលដោយស្វ័យប្រវត្តិអាចមានកំហុសឬភាពមិនត្រឹមត្រូវ។ ឯកសារដើមជាភាសាមូលដ្ឋានគួរត្រូវបានចាត់ទុកជាមូលដ្ធានដែលមានសុពលភាព។ សម្រាប់ព័ត៌មានសំខាន់ សូមផ្តល់អាទិភាពការបកប្រែដោយមនុស្សជំនាញវិជ្ជាជីវៈ។ យើងមិនទទួលខុសត្រូវចំពោះការយល់ច្រឡំ ឬការបកស្រាយខុសពីការប្រើប្រាស់ការបកប្រែនេះឡើយ។