āĻ°āĻžāĻ¸ā§āĻĒāĻŦā§‡āĻ°āĻŋ āĻĒāĻžāĻ‡āĻ¤ā§‡ āĻ•ā§āĻ˛āĻžāĻ‰āĻĄ āĻ…āĻŦāĻœā§‡āĻ•ā§āĻŸ āĻĄāĻŋāĻŸā§‡āĻ•ā§āĻŸāĻ°ā§‡āĻ° āĻ­āĻŋāĻĄāĻŋāĻ“

āĻĒā§āĻ°āĻ¸ā§āĻ¤āĻžāĻŦāĻ¨āĻž

āĻŸā§‡āĻ¸āĻ˛āĻžāĻ° āĻ…āĻŸā§‹āĻĒāĻžāĻ‡āĻ˛āĻŸ āĻ•ā§€āĻ­āĻžāĻŦā§‡ āĻ°āĻžāĻ¸ā§āĻ¤āĻž āĻĻā§‡āĻ–ā§‡āĻ¨ āĻ¤āĻž āĻĻā§‡āĻ–āĻžāĻ¨ā§‹ āĻāĻ•āĻŸāĻŋ āĻ­āĻŋāĻĄāĻŋāĻ“ āĻāĻ–āĻ¨ āĻ‡āĻ¨ā§āĻŸāĻžāĻ°āĻ¨ā§‡āĻŸā§‡ āĻĒā§āĻ°āĻšāĻžāĻ°āĻŋāĻ¤ āĻšāĻšā§āĻ›ā§‡āĨ¤

āĻ†āĻŽāĻŋ āĻāĻ•āĻŸāĻŋ āĻĄāĻŋāĻŸā§‡āĻ•ā§āĻŸāĻ° āĻĻāĻŋāĻ¯āĻŧā§‡ āĻ¸āĻŽā§ƒāĻĻā§āĻ§ āĻ­āĻŋāĻĄāĻŋāĻ“ āĻ¸āĻŽā§āĻĒā§āĻ°āĻšāĻžāĻ° āĻ•āĻ°āĻ¤ā§‡ āĻ…āĻ¨ā§‡āĻ• āĻĻāĻŋāĻ¨ āĻ§āĻ°ā§‡ āĻšā§āĻ˛āĻ•āĻžāĻšā§āĻ›āĻŋ, āĻāĻŦāĻ‚ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦ āĻ¸āĻŽāĻ¯āĻŧā§‡āĨ¤

āĻ°āĻžāĻ¸ā§āĻĒāĻŦā§‡āĻ°āĻŋ āĻĒāĻžāĻ‡āĻ¤ā§‡ āĻ•ā§āĻ˛āĻžāĻ‰āĻĄ āĻ…āĻŦāĻœā§‡āĻ•ā§āĻŸ āĻĄāĻŋāĻŸā§‡āĻ•ā§āĻŸāĻ°ā§‡āĻ° āĻ­āĻŋāĻĄāĻŋāĻ“

āĻ¸āĻŽāĻ¸ā§āĻ¯āĻž āĻšāĻ˛ āĻ¯ā§‡ āĻ†āĻŽāĻŋ āĻ°āĻžāĻ¸ā§āĻĒāĻŦā§‡āĻ°āĻŋ āĻĨā§‡āĻ•ā§‡ āĻ­āĻŋāĻĄāĻŋāĻ“ āĻ¸āĻŽā§āĻĒā§āĻ°āĻšāĻžāĻ° āĻ•āĻ°āĻ¤ā§‡ āĻšāĻžāĻ‡, āĻāĻŦāĻ‚ āĻāĻ¤ā§‡ āĻ¨āĻŋāĻ‰āĻ°āĻžāĻ˛ āĻ¨ā§‡āĻŸāĻ“āĻ¯āĻŧāĻžāĻ°ā§āĻ• āĻĄāĻŋāĻŸā§‡āĻ•ā§āĻŸāĻ°ā§‡āĻ° āĻ•āĻžāĻ°ā§āĻ¯āĻ•āĻžāĻ°āĻŋāĻ¤āĻž āĻĒāĻ›āĻ¨ā§āĻĻā§‡āĻ° āĻ…āĻ¨ā§‡āĻ• āĻ•āĻŋāĻ›ā§ āĻ›ā§‡āĻĄāĻŧā§‡ āĻĻā§‡āĻ¯āĻŧāĨ¤

āĻ‡āĻ¨ā§āĻŸā§‡āĻ˛ āĻ¨āĻŋāĻ‰āĻ°āĻžāĻ˛ āĻ•āĻŽā§āĻĒāĻŋāĻ‰āĻŸāĻžāĻ° āĻ¸ā§āĻŸāĻŋāĻ•

āĻ†āĻŽāĻŋ āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āĻ¨ āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ āĻŦāĻŋāĻŦā§‡āĻšāĻ¨āĻž āĻ•āĻ°ā§‡āĻ›āĻŋāĨ¤

В āĻļā§‡āĻˇ āĻĒā§āĻ°āĻŦāĻ¨ā§āĻ§ āĻ‡āĻ¨ā§āĻŸā§‡āĻ˛ āĻ¨āĻŋāĻ‰āĻ°āĻžāĻ˛ āĻ•āĻŽā§āĻĒāĻŋāĻ‰āĻŸāĻžāĻ° āĻ¸ā§āĻŸāĻŋāĻ• āĻĻāĻŋāĻ¯āĻŧā§‡ āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻž āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤ āĻšāĻžāĻ°ā§āĻĄāĻ“āĻ¯āĻŧā§āĻ¯āĻžāĻ° āĻļāĻ•ā§āĻ¤āĻŋāĻļāĻžāĻ˛ā§€, āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻāĻ° āĻ¨āĻŋāĻœāĻ¸ā§āĻŦ āĻ¨ā§‡āĻŸāĻ“āĻ¯āĻŧāĻžāĻ°ā§āĻ• āĻŦāĻŋāĻ¨ā§āĻ¯āĻžāĻ¸ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨āĨ¤

āĻ¯āĻĻāĻŋāĻ“ āĻ‡āĻ¨ā§āĻŸā§‡āĻ˛ āĻĒā§āĻ°āĻ§āĻžāĻ¨ āĻĢā§āĻ°ā§‡āĻŽāĻ“āĻ¯āĻŧāĻžāĻ°ā§āĻ•ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ°ā§‚āĻĒāĻžāĻ¨ā§āĻ¤āĻ°āĻ•āĻžāĻ°ā§€ āĻ¸āĻ°āĻŦāĻ°āĻžāĻš āĻ•āĻ°ā§‡, āĻ¸ā§‡āĻ–āĻžāĻ¨ā§‡ āĻ…āĻ¨ā§‡āĻ•āĻ—ā§āĻ˛āĻŋ āĻ¤ā§āĻ°ā§āĻŸāĻŋ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤

āĻ‰āĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§‚āĻĒ, āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ā§€āĻ¯āĻŧ āĻ¨ā§‡āĻŸāĻ“āĻ¯āĻŧāĻžāĻ°ā§āĻ•ā§‡āĻ° āĻŦāĻŋāĻ¨ā§āĻ¯āĻžāĻ¸āĻŸāĻŋ āĻŦā§‡āĻŽāĻžāĻ¨āĻžāĻ¨ āĻšāĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡, āĻāĻŦāĻ‚ āĻ¯āĻĻāĻŋ āĻāĻŸāĻŋ āĻ¸āĻžāĻŽāĻžā§āĻœāĻ¸ā§āĻ¯āĻĒā§‚āĻ°ā§āĻŖ āĻšāĻ¯āĻŧ, āĻ¤āĻŦā§‡ āĻ•āĻŋāĻ›ā§ āĻ¸ā§āĻ¤āĻ° āĻĄāĻŋāĻ­āĻžāĻ‡āĻ¸ā§‡ āĻ¸āĻŽāĻ°ā§āĻĨāĻŋāĻ¤ āĻ¨āĻžāĻ“ āĻšāĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡, āĻāĻŦāĻ‚ āĻ¯āĻĻāĻŋ āĻ¸ā§‡āĻ—ā§āĻ˛āĻŋ āĻ¸āĻŽāĻ°ā§āĻĨāĻŋāĻ¤ āĻšāĻ¯āĻŧ, āĻ¤āĻžāĻšāĻ˛ā§‡ āĻ°ā§‚āĻĒāĻžāĻ¨ā§āĻ¤āĻ° āĻĒā§āĻ°āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻšāĻ˛āĻžāĻ•āĻžāĻ˛ā§€āĻ¨ āĻ¤ā§āĻ°ā§āĻŸāĻŋ āĻ˜āĻŸāĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡, āĻ¯āĻžāĻ° āĻĢāĻ˛āĻ¸ā§āĻŦāĻ°ā§‚āĻĒ āĻ†āĻŽāĻ°āĻž āĻ†āĻ‰āĻŸāĻĒā§āĻŸā§‡ āĻ•āĻŋāĻ›ā§ āĻ…āĻĻā§āĻ­ā§āĻ¤ āĻœāĻŋāĻ¨āĻŋāĻ¸ āĻĒā§‡āĻ¤ā§‡.

āĻ¸āĻžāĻ§āĻžāĻ°āĻŖāĻ­āĻžāĻŦā§‡, āĻ†āĻĒāĻ¨āĻŋ āĻ¯āĻĻāĻŋ āĻ•āĻŋāĻ›ā§ āĻ§āĻ°āĻŖā§‡āĻ° āĻ¨āĻŋāĻ°ā§āĻŦāĻŋāĻšāĻžāĻ°ā§‡ āĻ¨āĻŋāĻ‰āĻ°āĻžāĻ˛ āĻ¨ā§‡āĻŸāĻ“āĻ¯āĻŧāĻžāĻ°ā§āĻ• āĻšāĻžāĻ¨ āĻ¤āĻŦā§‡ āĻāĻŸāĻŋ NCS āĻāĻ° āĻ¸āĻžāĻĨā§‡ āĻ•āĻžāĻœ āĻ¨āĻžāĻ“ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĨ¤ āĻ…āĻ¤āĻāĻŦ, āĻ†āĻŽāĻŋ āĻ¸āĻŦāĻšā§‡āĻ¯āĻŧā§‡ āĻŦāĻŋāĻ¸ā§āĻ¤ā§ƒāĻ¤ āĻāĻŦāĻ‚ āĻ…ā§āĻ¯āĻžāĻ•ā§āĻ¸ā§‡āĻ¸āĻ¯ā§‹āĻ—ā§āĻ¯ āĻ¸āĻ°āĻžā§āĻœāĻžāĻŽāĻ—ā§āĻ˛āĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻžāĻŸāĻŋ āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ āĻ•āĻ°āĻžāĻ° āĻšā§‡āĻˇā§āĻŸāĻž āĻ•āĻ°āĻžāĻ° āĻ¸āĻŋāĻĻā§āĻ§āĻžāĻ¨ā§āĻ¤ āĻ¨āĻŋāĻ¯āĻŧā§‡āĻ›āĻŋāĨ¤

āĻŽā§‡āĻ˜

āĻāĻ•āĻŸāĻŋ āĻ¸ā§āĻĨāĻžāĻ¨ā§€āĻ¯āĻŧ āĻšāĻžāĻ°ā§āĻĄāĻ“āĻ¯āĻŧā§āĻ¯āĻžāĻ° āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ā§‡āĻ° āĻ¸ā§āĻ¸ā§āĻĒāĻˇā§āĻŸ āĻŦāĻŋāĻ•āĻ˛ā§āĻĒ āĻšāĻ˛ āĻ•ā§āĻ˛āĻžāĻ‰āĻĄā§‡ āĻ¯āĻžāĻ“āĻ¯āĻŧāĻžāĨ¤

āĻĒā§āĻ°āĻ¸ā§āĻ¤ā§āĻ¤ āĻŦāĻŋāĻ•āĻ˛ā§āĻĒ - āĻ†āĻŽāĻžāĻ° āĻšā§‹āĻ– āĻŦāĻ¨ā§āĻ¯ āĻ°āĻžāĻ¨.

āĻ¸āĻ•āĻ˛ āĻ¨ā§‡āĻ¤āĻž:

... āĻāĻŦāĻ‚ āĻ•āĻ¯āĻŧā§‡āĻ• āĻĄāĻœāĻ¨ āĻ•āĻŽ āĻĒāĻ°āĻŋāĻšāĻŋāĻ¤ āĻŦā§‡āĻļā§€.

āĻāĻ‡ āĻŦā§ˆāĻšāĻŋāĻ¤ā§āĻ°ā§āĻ¯ā§‡āĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻ¨āĻŋāĻ°ā§āĻŦāĻžāĻšāĻ¨ āĻ•āĻ°āĻž āĻŽā§‹āĻŸā§‡āĻ“ āĻ¸āĻšāĻœ āĻ¨āĻ¯āĻŧāĨ¤

āĻāĻŦāĻ‚ āĻ†āĻŽāĻŋ āĻŦā§‡āĻ›ā§‡ āĻ¨āĻž āĻ¨ā§‡āĻ“āĻ¯āĻŧāĻžāĻ° āĻ¸āĻŋāĻĻā§āĻ§āĻžāĻ¨ā§āĻ¤ āĻ¨āĻŋāĻ¯āĻŧā§‡āĻ›āĻŋ, āĻ¤āĻŦā§‡ āĻĄāĻ•āĻžāĻ°ā§‡ āĻ“āĻĒā§‡āĻ¨āĻ¸āĻŋāĻ­āĻŋāĻ¤ā§‡ āĻ­āĻžāĻ˛ āĻĒā§āĻ°āĻžāĻ¨ā§‹ āĻ•āĻžāĻœā§‡āĻ° āĻ¸ā§āĻ•āĻŋāĻŽāĻŸāĻŋ āĻŽā§‹āĻĄāĻŧāĻžāĻ¨ā§‹ āĻāĻŦāĻ‚ āĻ•ā§āĻ˛āĻžāĻ‰āĻĄā§‡ āĻšāĻžāĻ˛āĻžāĻ¨ā§‹āĻ° āĻ¸āĻŋāĻĻā§āĻ§āĻžāĻ¨ā§āĻ¤ āĻ¨āĻŋāĻ¯āĻŧā§‡āĻ›āĻŋāĨ¤

āĻāĻ‡ āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĻ° āĻ¸ā§āĻŦāĻŋāĻ§āĻž āĻš'āĻ˛ āĻ¨āĻŽāĻ¨ā§€āĻ¯āĻŧāĻ¤āĻž āĻāĻŦāĻ‚ āĻ¨āĻŋāĻ¯āĻŧāĻ¨ā§āĻ¤ā§āĻ°āĻŖ - āĻ†āĻĒāĻ¨āĻŋ āĻ¨āĻŋāĻ‰āĻ°āĻžāĻ˛ āĻ¨ā§‡āĻŸāĻ“āĻ¯āĻŧāĻžāĻ°ā§āĻ•, āĻšā§‹āĻ¸ā§āĻŸāĻŋāĻ‚, āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ° āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨ - āĻ¸āĻžāĻ§āĻžāĻ°āĻŖāĻ­āĻžāĻŦā§‡, āĻ¯ā§‡ āĻ•ā§‹āĻ¨āĻ“ āĻŦāĻžāĻ¤āĻŋāĻ•āĨ¤

āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ°

āĻāĻ•āĻŸāĻŋ āĻ¸ā§āĻĨāĻžāĻ¨ā§€āĻ¯āĻŧ āĻĒā§āĻ°ā§‹āĻŸā§‹āĻŸāĻžāĻ‡āĻĒ āĻĻāĻŋāĻ¯āĻŧā§‡ āĻļā§āĻ°ā§ āĻ•āĻ°āĻž āĻ¯āĻžāĻ•āĨ¤

āĻāĻ¤āĻŋāĻšā§āĻ¯āĻ—āĻ¤āĻ­āĻžāĻŦā§‡ āĻ†āĻŽāĻŋ REST API, OpenCV āĻāĻŦāĻ‚ MobileSSD āĻ¨ā§‡āĻŸāĻ“āĻ¯āĻŧāĻžāĻ°ā§āĻ•ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻĢā§āĻ˛āĻžāĻ¸ā§āĻ• āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻŋāĨ¤

āĻĄāĻ•āĻžāĻ°ā§‡ āĻŦāĻ°ā§āĻ¤āĻŽāĻžāĻ¨ āĻ¸āĻ‚āĻ¸ā§āĻ•āĻ°āĻŖāĻ—ā§āĻ˛āĻŋ āĻ‡āĻ¨āĻ¸ā§āĻŸāĻ˛ āĻ•āĻ°āĻžāĻ° āĻĒāĻ°ā§‡, āĻ†āĻŽāĻŋ āĻ†āĻŦāĻŋāĻˇā§āĻ•āĻžāĻ° āĻ•āĻ°ā§‡āĻ›āĻŋ āĻ¯ā§‡ OpenCV 4.1.2 āĻŽā§‹āĻŦāĻžāĻ‡āĻ˛ SSD v1_coco_2018_01_28 āĻāĻ° āĻ¸āĻžāĻĨā§‡ āĻ•āĻžāĻœ āĻ•āĻ°ā§‡ āĻ¨āĻž āĻāĻŦāĻ‚ āĻ†āĻŽāĻžāĻ•ā§‡ āĻĒā§āĻ°āĻŽāĻžāĻŖāĻŋāĻ¤ 11/06_2017-āĻ āĻĢāĻŋāĻ°ā§‡ āĻ¯ā§‡āĻ¤ā§‡ āĻšāĻ¯āĻŧā§‡āĻ›āĻŋāĻ˛āĨ¤

āĻĒāĻ°āĻŋāĻˇā§‡āĻŦāĻžāĻ° āĻļā§āĻ°ā§āĻ¤ā§‡, āĻ†āĻŽāĻ°āĻž āĻ•ā§āĻ˛āĻžāĻ¸ā§‡āĻ° āĻ¨āĻžāĻŽ āĻāĻŦāĻ‚ āĻ¨ā§‡āĻŸāĻ“āĻ¯āĻŧāĻžāĻ°ā§āĻ• āĻ˛ā§‹āĻĄ āĻ•āĻ°āĻŋ:

def init():
    tf_labels.initLabels(dnn_conf.DNN_LABELS_PATH)
    return cv.dnn.readNetFromTensorflow(dnn_conf.DNN_PATH, dnn_conf.DNN_TXT_PATH)

āĻāĻ•āĻŸāĻŋ āĻ¸ā§āĻĨāĻžāĻ¨ā§€āĻ¯āĻŧ āĻĄāĻ•āĻžāĻ°ā§‡ (āĻ–ā§āĻŦ āĻ•āĻŽ āĻŦāĻ¯āĻŧāĻ¸ā§€ āĻ˛ā§āĻ¯āĻžāĻĒāĻŸāĻĒā§‡) āĻāĻŸāĻŋ 0.3 āĻ¸ā§‡āĻ•ā§‡āĻ¨ā§āĻĄ āĻ¸āĻŽāĻ¯āĻŧ āĻ¨ā§‡āĻ¯āĻŧ, āĻ°āĻžāĻ¸ā§āĻĒāĻŦā§‡āĻ°āĻŋāĻ¤ā§‡ - 3.5āĨ¤

āĻ†āĻ¸ā§āĻ¨ āĻ—āĻŖāĻ¨āĻž āĻļā§āĻ°ā§ āĻ•āĻ°āĻž āĻ¯āĻžāĻ•:

def inference(img):
    net.setInput(cv.dnn.blobFromImage(img, 1.0/127.5, (300, 300), (127.5, 127.5, 127.5), swapRB=True, crop=False))
    return net.forward()

āĻĄāĻ•āĻžāĻ° - 0.2 āĻ¸ā§‡āĻ•ā§‡āĻ¨ā§āĻĄ, āĻ°āĻžāĻ¸ā§āĻĒāĻŦā§‡āĻ°āĻŋ - 1.7āĨ¤

āĻŸā§‡āĻ¨āĻ¸āĻ° āĻ¨āĻŋāĻˇā§āĻ•āĻžāĻļāĻ¨āĻ•ā§‡ āĻĒāĻžāĻ āĻ¯ā§‹āĻ—ā§āĻ¯ json-āĻ āĻĒāĻ°āĻŋāĻŖāĻ¤ āĻ•āĻ°āĻž:

def build_detection(data, thr, rows, cols):
    ret = []
    for detection in data[0,0,:,:]:
        score = float(detection[2])
        if score > thr:
            cls = int(detection[1])
            a = {"class" : cls, "name" : tf_labels.getLabel(cls),  "score" : score}
            a["x"] = int(detection[3] * cols)
            a["y"] = int(detection[4] * rows)
            a["w"] = int(detection[5] * cols ) - a["x"]
            a["h"] = int(detection[6] * rows) - a["y"]
            ret.append(a)
    return ret

āĻ…āĻ§āĻŋāĻ•āĻ¤āĻ° āĻĢā§āĻ˛āĻžāĻ¸ā§āĻ•ā§‡āĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§‡ āĻāĻ‡ āĻ…āĻĒāĻžāĻ°ā§‡āĻļāĻ¨āĻŸāĻŋ āĻ°āĻĒā§āĻ¤āĻžāĻ¨āĻŋ āĻ•āĻ°ā§āĻ¨(āĻ‡āĻ¨āĻĒā§āĻŸ āĻšāĻ˛ āĻāĻ•āĻŸāĻŋ āĻ›āĻŦāĻŋ, āĻ†āĻ‰āĻŸāĻĒā§āĻŸ āĻšāĻ˛ json-āĻ āĻĄāĻŋāĻŸā§‡āĻ•ā§āĻŸāĻ°ā§‡āĻ° āĻĢāĻ˛āĻžāĻĢāĻ˛)āĨ¤

āĻāĻ•āĻŸāĻŋ āĻŦāĻŋāĻ•āĻ˛ā§āĻĒ āĻŦāĻŋāĻ•āĻ˛ā§āĻĒ, āĻ¯ā§‡āĻ–āĻžāĻ¨ā§‡ āĻ†āĻ°āĻ“ āĻ•āĻžāĻœ āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ°ā§‡ āĻ¸ā§āĻĨāĻžāĻ¨āĻžāĻ¨ā§āĻ¤āĻ°āĻŋāĻ¤ āĻšāĻ¯āĻŧ: āĻāĻŸāĻŋ āĻ¨āĻŋāĻœā§‡āĻ‡ āĻĒāĻžāĻ“āĻ¯āĻŧāĻž āĻŦāĻ¸ā§āĻ¤ā§āĻ—ā§āĻ˛āĻŋāĻ•ā§‡ āĻŦā§ƒāĻ¤ā§āĻ¤ āĻ•āĻ°ā§‡ āĻāĻŦāĻ‚ āĻ¸āĻŽāĻžāĻĒā§āĻ¤ āĻšāĻŋāĻ¤ā§āĻ°āĻŸāĻŋ āĻĢā§‡āĻ°āĻ¤ āĻĻā§‡āĻ¯āĻŧāĨ¤

āĻāĻ‡ āĻŦāĻŋāĻ•āĻ˛ā§āĻĒāĻŸāĻŋ āĻ­āĻžāĻ˛ āĻ¯ā§‡āĻ–āĻžāĻ¨ā§‡ āĻ†āĻŽāĻ°āĻž āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ°ā§‡ opencv āĻŸā§‡āĻ¨ā§‡ āĻ†āĻ¨āĻ¤ā§‡ āĻšāĻžāĻ‡ āĻ¨āĻžāĨ¤

āĻĄāĻ•āĻžāĻ°

āĻ†āĻŽāĻ°āĻž āĻ›āĻŦāĻŋāĻŸāĻŋ āĻ¸āĻ‚āĻ—ā§āĻ°āĻš āĻ•āĻ°āĻŋāĨ¤

āĻ•ā§‹āĻĄ combed āĻāĻŦāĻ‚ āĻĒā§‹āĻ¸ā§āĻŸ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ āĻ—āĻŋāĻĨā§āĻŦ, āĻĄāĻ•āĻžāĻ° āĻ¸ā§‡āĻ–āĻžāĻ¨ āĻĨā§‡āĻ•ā§‡ āĻ¸āĻ°āĻžāĻ¸āĻ°āĻŋ āĻ¨āĻŋāĻ¯āĻŧā§‡ āĻ¯āĻžāĻŦā§‡āĨ¤

āĻāĻ•āĻŸāĻŋ āĻĒā§āĻ˛ā§āĻ¯āĻžāĻŸāĻĢāĻ°ā§āĻŽ āĻšāĻŋāĻ¸āĻžāĻŦā§‡, āĻ†āĻŽāĻ°āĻž āĻ°āĻžāĻ¸ā§āĻĒāĻŦā§‡āĻ°āĻŋāĻ° āĻŽāĻ¤ā§‹ āĻāĻ•āĻ‡ āĻĄā§‡āĻŦāĻŋāĻ¯āĻŧāĻžāĻ¨ āĻ¸ā§āĻŸā§āĻ°ā§‡āĻš āĻ¨ā§‡āĻŦ - āĻ†āĻŽāĻ°āĻž āĻĒā§āĻ°āĻŽāĻžāĻŖāĻŋāĻ¤ āĻĒā§āĻ°āĻ¯ā§āĻ•ā§āĻ¤āĻŋ āĻ¸ā§āĻŸā§āĻ¯āĻžāĻ• āĻĨā§‡āĻ•ā§‡ āĻŦāĻŋāĻšā§āĻ¯ā§āĻ¤ āĻšāĻŦ āĻ¨āĻžāĨ¤

āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻĢā§āĻ˛āĻžāĻ¸ā§āĻ•, āĻĒā§āĻ°ā§‹āĻŸā§‹āĻŦāĻžāĻĢ, āĻ°āĻŋāĻ•ā§‹āĻ¯āĻŧā§‡āĻ¸ā§āĻŸ, opencv_python āĻ‡āĻ¨āĻ¸ā§āĻŸāĻ˛ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡, Github āĻĨā§‡āĻ•ā§‡ āĻŽā§‹āĻŦāĻžāĻ‡āĻ˛ SSD, āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ° āĻ•ā§‹āĻĄ āĻĄāĻžāĻ‰āĻ¨āĻ˛ā§‹āĻĄ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡ āĻāĻŦāĻ‚ āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ° āĻšāĻžāĻ˛ā§ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡āĨ¤

FROM python:3.7-stretch

RUN pip3 install flask
RUN pip3 install protobuf
RUN pip3 install requests
RUN pip3 install opencv_python

ADD http://download.tensorflow.org/models/object_detection/ssd_mobilenet_v1_coco_11_06_2017.tar.gz /
RUN tar -xvf /ssd_mobilenet_v1_coco_11_06_2017.tar.gz

ADD https://github.com/tprlab/docker-detect/archive/master.zip /
RUN unzip /master.zip

EXPOSE 80

CMD ["python3", "/docker-detect-master/detect-app/app.py"]

āĻ¸āĻšāĻœ āĻ†āĻŦāĻŋāĻˇā§āĻ•āĻžāĻ°āĻ• āĻ•ā§āĻ˛āĻžāĻ¯āĻŧā§‡āĻ¨ā§āĻŸ āĻ…āĻ¨ā§āĻ°ā§‹āĻ§ā§‡āĻ° āĻ‰āĻĒāĻ° āĻ­āĻŋāĻ¤ā§āĻ¤āĻŋ āĻ•āĻ°ā§‡āĨ¤

āĻĄāĻ•āĻžāĻ° āĻšāĻžāĻŦā§‡ āĻĒā§āĻ°āĻ•āĻžāĻļ āĻ•āĻ°āĻž āĻšāĻšā§āĻ›ā§‡

āĻĄāĻ•āĻžāĻ° āĻ°ā§‡āĻœāĻŋāĻ¸ā§āĻŸā§āĻ°āĻŋāĻ—ā§āĻ˛āĻŋ āĻ•ā§āĻ˛āĻžāĻ‰āĻĄ āĻĄāĻŋāĻŸā§‡āĻ•ā§āĻŸāĻ°ā§‡āĻ° āĻšā§‡āĻ¯āĻŧā§‡ āĻ•āĻŽ āĻ—āĻ¤āĻŋāĻ¤ā§‡ āĻ¸āĻ‚āĻ–ā§āĻ¯āĻžāĻŦā§ƒāĻĻā§āĻ§āĻŋ āĻ•āĻ°āĻ›ā§‡āĨ¤

āĻ¯āĻžāĻ¤ā§‡ āĻŦāĻŋāĻ°āĻ•ā§āĻ¤ āĻ¨āĻž āĻšāĻ¯āĻŧ, āĻ†āĻŽāĻ°āĻž āĻ°āĻ•ā§āĻˇāĻŖāĻļā§€āĻ˛āĻ­āĻžāĻŦā§‡ āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§‡ āĻ¯ā§‡āĻ¤ā§‡ āĻšāĻŦā§‡ āĻĄāĻ•āĻžāĻ°āĻšāĻžāĻŦ.

  1. āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§āĻ¨
  2. āĻĒā§āĻ°āĻŦā§‡āĻļ āĻ•āĻ°ā§āĻ¨:
    āĻĄāĻ•āĻžāĻ° āĻ˛āĻ—āĻ‡āĻ¨
  3. āĻ†āĻ¸ā§āĻ¨ āĻāĻ•āĻŸāĻŋ āĻ…āĻ°ā§āĻĨāĻĒā§‚āĻ°ā§āĻŖ āĻ¨āĻžāĻŽ āĻ¨āĻŋāĻ¯āĻŧā§‡ āĻ†āĻ¸āĻž āĻ¯āĻžāĻ•:
    āĻĄāĻ•āĻžāĻ° āĻŸā§āĻ¯āĻžāĻ— opencv-detect tprlab/opencv-detect-ssd
  4. āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ°ā§‡ āĻ›āĻŦāĻŋāĻŸāĻŋ āĻ†āĻĒāĻ˛ā§‹āĻĄ āĻ•āĻ°ā§āĻ¨:
    āĻĄāĻ•āĻžāĻ° āĻĒā§āĻļ tprlab/opencv-detect-ssd

āĻ†āĻŽāĻ°āĻž āĻŽā§‡āĻ˜ā§‡ āĻ˛āĻžā§āĻš āĻ•āĻ°āĻŋ

āĻ•āĻ¨ā§āĻŸā§‡āĻ‡āĻ¨āĻžāĻ° āĻ•ā§‹āĻĨāĻžāĻ¯āĻŧ āĻšāĻžāĻ˛āĻžāĻŦā§‡āĻ¨ āĻ¤āĻžāĻ° āĻĒāĻ›āĻ¨ā§āĻĻāĻ“ āĻŦā§‡āĻļ āĻĒā§āĻ°āĻļāĻ¸ā§āĻ¤āĨ¤

āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻŦāĻĄāĻŧ āĻĒā§āĻ˛ā§‡āĻ¯āĻŧāĻžāĻ° (āĻ—ā§āĻ—āĻ˛, āĻŽāĻžāĻ‡āĻ•ā§āĻ°ā§‹āĻ¸āĻĢā§āĻŸ, āĻ…ā§āĻ¯āĻžāĻŽāĻžāĻœāĻ¨) āĻĒā§āĻ°āĻĨāĻŽ āĻŦāĻ›āĻ°ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻŦāĻŋāĻ¨āĻžāĻŽā§‚āĻ˛ā§āĻ¯ā§‡ āĻāĻ•āĻŸāĻŋ āĻŽāĻžāĻ‡āĻ•ā§āĻ°ā§‹-āĻ‡āĻ¨āĻ¸ā§āĻŸā§āĻ¯āĻžāĻ¨ā§āĻ¸ āĻ…āĻĢāĻžāĻ° āĻ•āĻ°ā§‡āĨ¤
āĻŽāĻžāĻ‡āĻ•ā§āĻ°ā§‹āĻ¸āĻĢā§āĻŸ Azure āĻāĻŦāĻ‚ Google āĻ•ā§āĻ˛āĻžāĻ‰āĻĄā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻž āĻ•āĻ°āĻžāĻ° āĻĒāĻ°ā§‡, āĻ†āĻŽāĻŋ āĻĒāĻ°āĻŦāĻ°ā§āĻ¤ā§€āĻ¤ā§‡ āĻ¸ā§āĻĨāĻŋāĻ° āĻšāĻ¯āĻŧā§‡āĻ›āĻŋ āĻ•āĻžāĻ°āĻŖ āĻāĻŸāĻŋ āĻĻā§āĻ°ā§āĻ¤ āĻŦāĻ¨ā§āĻ§ āĻšāĻ¯āĻŧā§‡ āĻ—ā§‡āĻ›ā§‡āĨ¤

āĻ†āĻŽāĻŋ āĻāĻ–āĻžāĻ¨ā§‡ āĻ¨āĻŋāĻ°ā§āĻĻā§‡āĻļāĻžāĻŦāĻ˛ā§€ āĻ˛āĻŋāĻ–āĻŋāĻ¨āĻŋ, āĻ¯ā§‡āĻšā§‡āĻ¤ā§ āĻāĻ‡ āĻ…āĻ‚āĻļāĻŸāĻŋ āĻ¨āĻŋāĻ°ā§āĻŦāĻžāĻšāĻŋāĻ¤ āĻĒā§āĻ°āĻĻāĻžāĻ¨āĻ•āĻžāĻ°ā§€āĻ° āĻœāĻ¨ā§āĻ¯ āĻ–ā§āĻŦ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻŸāĨ¤

āĻ†āĻŽāĻŋ āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āĻ¨ āĻšāĻžāĻ°ā§āĻĄāĻ“āĻ¯āĻŧā§āĻ¯āĻžāĻ° āĻŦāĻŋāĻ•āĻ˛ā§āĻĒ āĻšā§‡āĻˇā§āĻŸāĻž āĻ•āĻ°ā§‡āĻ›āĻŋ,
āĻ¨āĻŋāĻŽā§āĻ¨ āĻ¸ā§āĻ¤āĻ° (āĻ­āĻžāĻ— āĻ•āĻ°āĻž āĻāĻŦāĻ‚ āĻ‰āĻ¤ā§āĻ¸āĻ°ā§āĻ—ā§€āĻ•ā§ƒāĻ¤) - 0.4 - 0.5 āĻ¸ā§‡āĻ•ā§‡āĻ¨ā§āĻĄāĨ¤
āĻ†āĻ°āĻ“ āĻļāĻ•ā§āĻ¤āĻŋāĻļāĻžāĻ˛ā§€ āĻ—āĻžāĻĄāĻŧāĻŋ - 0.25 - 0.3āĨ¤
āĻ āĻŋāĻ• āĻ†āĻ›ā§‡, āĻāĻŽāĻ¨āĻ•āĻŋ āĻ¸āĻŦāĻšā§‡āĻ¯āĻŧā§‡ āĻ–āĻžāĻ°āĻžāĻĒ āĻĒāĻ°āĻŋāĻ¸ā§āĻĨāĻŋāĻ¤āĻŋāĻ¤ā§‡āĻ“, āĻœāĻ¯āĻŧ āĻ¤āĻŋāĻ¨āĻŦāĻžāĻ°, āĻ†āĻĒāĻ¨āĻŋ āĻšā§‡āĻˇā§āĻŸāĻž āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨āĨ¤

āĻ­āĻŋāĻĄāĻŋāĻ“

āĻ†āĻŽāĻ°āĻž āĻ°āĻžāĻ¸ā§āĻĒāĻŦā§‡āĻ°āĻŋāĻ¤ā§‡ āĻāĻ•āĻŸāĻŋ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ OpenCV āĻ­āĻŋāĻĄāĻŋāĻ“ āĻ¸ā§āĻŸā§āĻ°ā§€āĻŽāĻžāĻ° āĻ˛āĻžā§āĻš āĻ•āĻ°āĻŋ, Google āĻ•ā§āĻ˛āĻžāĻ‰āĻĄā§‡āĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§‡ āĻ¸āĻ¨āĻžāĻ•ā§āĻ¤ āĻ•āĻ°ā§‡ā§ˇ
āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻžāĻ° āĻœāĻ¨ā§āĻ¯, āĻāĻ•āĻŸāĻŋ āĻ­āĻŋāĻĄāĻŋāĻ“ āĻĢāĻžāĻ‡āĻ˛ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›āĻŋāĻ˛ āĻ¯āĻž āĻāĻ•āĻŦāĻžāĻ° āĻ°ā§āĻ¯āĻžāĻ¨ā§āĻĄāĻŽ āĻ›ā§‡āĻĻ āĻ āĻšāĻŋāĻ¤ā§āĻ°āĻžāĻ¯āĻŧāĻŋāĻ¤ āĻšāĻ¯āĻŧā§‡āĻ›āĻŋāĻ˛āĨ¤


def handle_frame(frame):
    return detect.detect_draw_img(frame)
       
def generate():
    while True:
        rc, frame = vs.read()
        outFrame = handle_frame(frame)
        if outFrame is None:
            (rc, outFrame) = cv.imencode(".jpg", frame)
        yield(b'--framern' b'Content-Type: image/jpegrnrn' + bytearray(outFrame) + b'rn')

@app.route("/stream")
def video_feed():
    return Response(generate(), mimetype = "multipart/x-mixed-replace; boundary=frame")

āĻĄāĻŋāĻŸā§‡āĻ•ā§āĻŸāĻ°ā§‡āĻ° āĻ¸āĻžāĻšāĻžāĻ¯ā§āĻ¯ā§‡ āĻ†āĻŽāĻ°āĻž āĻĒā§āĻ°āĻ¤āĻŋ āĻ¸ā§‡āĻ•ā§‡āĻ¨ā§āĻĄā§‡ āĻ¤āĻŋāĻ¨āĻŸāĻŋ āĻĢā§āĻ°ā§‡āĻŽā§‡āĻ° āĻŦā§‡āĻļāĻŋ āĻĒāĻžāĻ‡ āĻ¨āĻž, āĻ¸āĻŦāĻ•āĻŋāĻ›ā§ āĻ–ā§āĻŦ āĻ§ā§€āĻ°ā§‡ āĻ§ā§€āĻ°ā§‡ āĻ¯āĻžāĻ¯āĻŧāĨ¤
āĻ†āĻĒāĻ¨āĻŋ āĻ¯āĻĻāĻŋ āĻœāĻŋāĻ•ā§āĻ˛āĻžāĻ‰āĻĄā§‡ āĻāĻ•āĻŸāĻŋ āĻļāĻ•ā§āĻ¤āĻŋāĻļāĻžāĻ˛ā§€ āĻŽā§‡āĻļāĻŋāĻ¨ āĻ¨āĻŋāĻ¯āĻŧā§‡ āĻ¯āĻžāĻ¨, āĻ†āĻĒāĻ¨āĻŋ āĻĒā§āĻ°āĻ¤āĻŋ āĻ¸ā§‡āĻ•ā§‡āĻ¨ā§āĻĄā§‡ 4-5 āĻĢā§āĻ°ā§‡āĻŽ āĻ¸āĻ¨āĻžāĻ•ā§āĻ¤ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨, āĻ¤āĻŦā§‡ āĻĒāĻžāĻ°ā§āĻĨāĻ•ā§āĻ¯āĻŸāĻŋ āĻšā§‹āĻ–ā§‡āĻ° āĻ•āĻžāĻ›ā§‡ āĻĒā§āĻ°āĻžāĻ¯āĻŧ āĻ…āĻĻā§ƒāĻļā§āĻ¯, āĻāĻŸāĻŋ āĻāĻ–āĻ¨āĻ“ āĻ§ā§€āĻ°āĨ¤

āĻ°āĻžāĻ¸ā§āĻĒāĻŦā§‡āĻ°āĻŋ āĻĒāĻžāĻ‡āĻ¤ā§‡ āĻ•ā§āĻ˛āĻžāĻ‰āĻĄ āĻ…āĻŦāĻœā§‡āĻ•ā§āĻŸ āĻĄāĻŋāĻŸā§‡āĻ•ā§āĻŸāĻ°ā§‡āĻ° āĻ­āĻŋāĻĄāĻŋāĻ“

āĻ•ā§āĻ˛āĻžāĻ‰āĻĄ āĻāĻŦāĻ‚ āĻĒāĻ°āĻŋāĻŦāĻšāĻ¨ āĻ–āĻ°āĻš āĻāĻ° āĻ¸āĻžāĻĨā§‡ āĻ•āĻŋāĻ›ā§āĻ‡ āĻ•āĻ°āĻžāĻ° āĻ¨ā§‡āĻ‡; āĻĄāĻŋāĻŸā§‡āĻ•ā§āĻŸāĻ° āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ āĻšāĻžāĻ°ā§āĻĄāĻ“āĻ¯āĻŧā§āĻ¯āĻžāĻ°ā§‡ āĻšāĻ˛ā§‡ āĻāĻŦāĻ‚ āĻāĻ‡āĻ°āĻ•āĻŽ āĻ—āĻ¤āĻŋāĻ¤ā§‡ āĻ•āĻžāĻœ āĻ•āĻ°ā§‡āĨ¤

āĻ¨āĻŋāĻ‰āĻ°āĻžāĻ˛ āĻ•āĻŽā§āĻĒāĻŋāĻ‰āĻŸāĻžāĻ° āĻ¸ā§āĻŸāĻŋāĻ•

āĻ†āĻŽāĻŋ āĻĒā§āĻ°āĻ¤āĻŋāĻ°ā§‹āĻ§ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°āĻŋāĻ¨āĻŋ āĻāĻŦāĻ‚ āĻāĻ¨āĻ¸āĻŋāĻāĻ¸-āĻ āĻŦā§‡āĻžā§āĻšāĻŽāĻžāĻ°ā§āĻ• āĻšāĻžāĻ˛āĻžāĻ¤ā§‡ āĻĒāĻžāĻ°āĻŋāĻ¨āĻŋāĨ¤

āĻĄāĻŋāĻŸā§‡āĻ•ā§āĻŸāĻ°ā§‡āĻ° āĻ—āĻ¤āĻŋ 0.1 āĻ¸ā§‡āĻ•ā§‡āĻ¨ā§āĻĄā§‡āĻ° āĻšā§‡āĻ¯āĻŧā§‡ āĻ•āĻŋāĻ›ā§āĻŸāĻž āĻ§ā§€āĻ°, āĻ¯ā§‡ āĻ•ā§‹āĻ¨āĻ“ āĻ•ā§āĻˇā§‡āĻ¤ā§āĻ°ā§‡ āĻāĻ•āĻŸāĻŋ āĻĻā§āĻ°ā§āĻŦāĻ˛ āĻŽā§‡āĻļāĻŋāĻ¨ā§‡ āĻŽā§‡āĻ˜ā§‡āĻ° āĻšā§‡āĻ¯āĻŧā§‡ 2-3 āĻ—ā§āĻŖ āĻĻā§āĻ°ā§āĻ¤, āĻ…āĻ°ā§āĻĨāĻžā§Ž āĻĒā§āĻ°āĻ¤āĻŋ āĻ¸ā§‡āĻ•ā§‡āĻ¨ā§āĻĄā§‡ 8-9 āĻĢā§āĻ°ā§‡āĻŽāĨ¤

āĻ°āĻžāĻ¸ā§āĻĒāĻŦā§‡āĻ°āĻŋ āĻĒāĻžāĻ‡āĻ¤ā§‡ āĻ•ā§āĻ˛āĻžāĻ‰āĻĄ āĻ…āĻŦāĻœā§‡āĻ•ā§āĻŸ āĻĄāĻŋāĻŸā§‡āĻ•ā§āĻŸāĻ°ā§‡āĻ° āĻ­āĻŋāĻĄāĻŋāĻ“

āĻĢāĻ˛āĻžāĻĢāĻ˛ā§‡āĻ° āĻĒāĻžāĻ°ā§āĻĨāĻ•ā§āĻ¯ āĻāĻ‡ āĻ¸āĻ¤ā§āĻ¯ āĻĻā§āĻŦāĻžāĻ°āĻž āĻŦā§āĻ¯āĻžāĻ–ā§āĻ¯āĻž āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡ āĻ¯ā§‡ NCS āĻŽā§‹āĻŦāĻžāĻ‡āĻ˛ SSD āĻ¸āĻ‚āĻ¸ā§āĻ•āĻ°āĻŖ 2018_01_28 āĻšāĻ˛āĻ›āĻŋāĻ˛āĨ¤

āĻĒā§āĻ¨āĻļā§āĻš. āĻāĻ›āĻžāĻĄāĻŧāĻžāĻ“, āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻžāĻ—ā§āĻ˛āĻŋ āĻĻā§‡āĻ–āĻŋāĻ¯āĻŧā§‡āĻ›ā§‡ āĻ¯ā§‡ āĻāĻ•āĻŸāĻŋ I7 āĻĒā§āĻ°āĻ¸ā§‡āĻ¸āĻ° āĻ¸āĻš āĻāĻ•āĻŸāĻŋ āĻŽā§‹āĻŸāĻžāĻŽā§āĻŸāĻŋ āĻļāĻ•ā§āĻ¤āĻŋāĻļāĻžāĻ˛ā§€ āĻĄā§‡āĻ¸ā§āĻ•āĻŸāĻĒ āĻŽā§‡āĻļāĻŋāĻ¨ āĻ•āĻŋāĻ›ā§āĻŸāĻž āĻ­āĻžāĻ˛ āĻĢāĻ˛āĻžāĻĢāĻ˛ āĻĻā§‡āĻ–āĻžāĻ¯āĻŧ āĻāĻŦāĻ‚ āĻāĻŸāĻŋ āĻĒā§āĻ°āĻ¤āĻŋ āĻ¸ā§‡āĻ•ā§‡āĻ¨ā§āĻĄā§‡ 10 āĻĢā§āĻ°ā§‡āĻŽ āĻ†āĻ‰āĻŸ āĻ•āĻ°āĻž āĻ¸āĻŽā§āĻ­āĻŦ āĻŦāĻ˛ā§‡ āĻĒā§āĻ°āĻŽāĻžāĻŖāĻŋāĻ¤ āĻšāĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤

āĻ—ā§āĻšā§āĻ›

āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻžāĻŸāĻŋ āĻ†āĻ°āĻ“ āĻāĻ—āĻŋāĻ¯āĻŧā§‡ āĻ—ā§‡āĻ˛ āĻāĻŦāĻ‚ āĻ†āĻŽāĻŋ Google Kubernetes-āĻ āĻĒāĻžāĻāĻšāĻŸāĻŋ āĻ¨ā§‹āĻĄā§‡ āĻĄāĻŋāĻŸā§‡āĻ•ā§āĻŸāĻ° āĻ‡āĻ¨āĻ¸ā§āĻŸāĻ˛ āĻ•āĻ°ā§‡āĻ›āĻŋāĨ¤
āĻĒāĻĄāĻ—ā§āĻ˛āĻŋ āĻ¨āĻŋāĻœā§‡āĻ°āĻžāĻ‡ āĻĻā§āĻ°ā§āĻŦāĻ˛ āĻ›āĻŋāĻ˛ āĻāĻŦāĻ‚ āĻ¤āĻžāĻĻā§‡āĻ° āĻĒā§āĻ°āĻ¤ā§āĻ¯ā§‡āĻ•āĻŸāĻŋ āĻĒā§āĻ°āĻ¤āĻŋ āĻ¸ā§‡āĻ•ā§‡āĻ¨ā§āĻĄā§‡ 2 āĻĢā§āĻ°ā§‡āĻŽā§‡āĻ° āĻŦā§‡āĻļāĻŋ āĻĒā§āĻ°āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨āĻŋāĨ¤
āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻ†āĻĒāĻ¨āĻŋ āĻ¯āĻĻāĻŋ N āĻ¨ā§‹āĻĄ āĻ¸āĻš āĻāĻ•āĻŸāĻŋ āĻ•ā§āĻ˛āĻžāĻ¸ā§āĻŸāĻžāĻ° āĻšāĻžāĻ˛āĻžāĻ¨ āĻāĻŦāĻ‚ N āĻĨā§āĻ°ā§‡āĻĄā§‡ āĻĒāĻžāĻ°ā§āĻ¸ āĻĢā§āĻ°ā§‡āĻŽ āĻ•āĻ°ā§‡āĻ¨, āĻ¤āĻžāĻšāĻ˛ā§‡ āĻĒāĻ°ā§āĻ¯āĻžāĻĒā§āĻ¤ āĻ¸āĻ‚āĻ–ā§āĻ¯āĻ• āĻ¨ā§‹āĻĄ (5) āĻĻāĻŋāĻ¯āĻŧā§‡ āĻ†āĻĒāĻ¨āĻŋ āĻĒā§āĻ°āĻ¤āĻŋ āĻ¸ā§‡āĻ•ā§‡āĻ¨ā§āĻĄā§‡ āĻ•āĻžāĻ™ā§āĻ–āĻŋāĻ¤ 10āĻŸāĻŋ āĻĢā§āĻ°ā§‡āĻŽ āĻ…āĻ°ā§āĻœāĻ¨ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨āĨ¤

def generate():
    while True:
        rc, frame = vs.read()
        if frame is not None:
            future = executor.submit(handle_frame, (frame.copy()))
            Q.append(future)

        keep_polling = len(Q) > 0
        while(keep_polling):            
            top = Q[0]
            if top.done():
                outFrame = top.result()
                Q.popleft()
                if outFrame:
                    yield(b'--framern' b'Content-Type: image/jpegrnrn' + bytearray(outFrame) + b'rn')
                keep_polling = len(Q) > 0
            else:
                keep_polling = len(Q) >= M

āĻāĻ–āĻžāĻ¨ā§‡ āĻ•āĻŋ āĻ˜āĻŸā§‡āĻ›ā§‡:

āĻ°āĻžāĻ¸ā§āĻĒāĻŦā§‡āĻ°āĻŋ āĻĒāĻžāĻ‡āĻ¤ā§‡ āĻ•ā§āĻ˛āĻžāĻ‰āĻĄ āĻ…āĻŦāĻœā§‡āĻ•ā§āĻŸ āĻĄāĻŋāĻŸā§‡āĻ•ā§āĻŸāĻ°ā§‡āĻ° āĻ­āĻŋāĻĄāĻŋāĻ“

NCS-āĻāĻ° āĻ¤ā§āĻ˛āĻ¨āĻžāĻ¯āĻŧ āĻāĻ•āĻŸā§ āĻ•āĻŽ āĻĻā§āĻ°ā§āĻ¤, āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻāĻ•āĻŸāĻŋ āĻ¸ā§āĻŸā§āĻ°āĻŋāĻŽā§‡āĻ° āĻ¤ā§āĻ˛āĻ¨āĻžāĻ¯āĻŧ āĻ†āĻ°āĻ“ āĻœā§‹āĻ°āĻžāĻ˛ā§‹ā§ˇ

āĻ˛āĻžāĻ­, āĻ…āĻŦāĻļā§āĻ¯āĻ‡, āĻ°ā§ˆāĻ–āĻŋāĻ• āĻ¨āĻ¯āĻŧ - āĻ“āĻĒā§‡āĻ¨āĻ¸āĻŋāĻ­āĻŋ āĻ‡āĻŽā§‡āĻœāĻ—ā§āĻ˛āĻŋāĻ° āĻ¸āĻŋāĻ™ā§āĻ•ā§āĻ°ā§‹āĻ¨āĻžāĻ‡āĻœā§‡āĻļāĻ¨ āĻāĻŦāĻ‚ āĻ—āĻ­ā§€āĻ° āĻ…āĻ¨ā§āĻ˛āĻŋāĻĒāĻŋ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ“āĻ­āĻžāĻ°āĻ˛ā§‡ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤

āĻ‰āĻĒāĻ¸āĻ‚āĻšāĻžāĻ°

āĻ¸āĻžāĻŽāĻ—ā§āĻ°āĻŋāĻ•āĻ­āĻžāĻŦā§‡, āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻžāĻŸāĻŋ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻāĻ‡ āĻ‰āĻĒāĻ¸āĻ‚āĻšāĻžāĻ°ā§‡ āĻĒā§ŒāĻāĻ›āĻžāĻ¨ā§‹āĻ° āĻ…āĻ¨ā§āĻŽāĻ¤āĻŋ āĻĻā§‡āĻ¯āĻŧ āĻ¯ā§‡ āĻ†āĻĒāĻ¨āĻŋ āĻ¯āĻĻāĻŋ āĻšā§‡āĻˇā§āĻŸāĻž āĻ•āĻ°ā§‡āĻ¨ āĻ¤āĻŦā§‡ āĻ†āĻĒāĻ¨āĻŋ āĻāĻ•āĻŸāĻŋ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ āĻŽā§‡āĻ˜ā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻĻā§‚āĻ°ā§‡ āĻ¯ā§‡āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨āĨ¤

āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻāĻ•āĻŸāĻŋ āĻļāĻ•ā§āĻ¤āĻŋāĻļāĻžāĻ˛ā§€ āĻĄā§‡āĻ¸ā§āĻ•āĻŸāĻĒ āĻŦāĻž āĻ¸ā§āĻĨāĻžāĻ¨ā§€āĻ¯āĻŧ āĻšāĻžāĻ°ā§āĻĄāĻ“āĻ¯āĻŧā§āĻ¯āĻžāĻ° āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻ†āĻ°āĻ“ āĻ­āĻžāĻ˛ āĻĢāĻ˛āĻžāĻĢāĻ˛ āĻ…āĻ°ā§āĻœāĻ¨ āĻ•āĻ°āĻ¤ā§‡ āĻĻā§‡āĻ¯āĻŧ āĻāĻŦāĻ‚ āĻ•ā§‹āĻ¨ā§‹ āĻ•ā§ŒāĻļāĻ˛ āĻ›āĻžāĻĄāĻŧāĻžāĻ‡āĨ¤

āĻ°ā§‡āĻĢāĻžāĻ°ā§‡āĻ¨ā§āĻ¸

āĻ‰āĻ¤ā§āĻ¸: www.habr.com

āĻāĻ•āĻŸāĻŋ āĻŽāĻ¨ā§āĻ¤āĻŦā§āĻ¯ āĻœā§āĻĄāĻŧā§āĻ¨