Qt āĻĨā§‡āĻ•ā§‡ STM32 āĻĒā§‹āĻ°ā§āĻŸ āĻ•āĻ°āĻž āĻšāĻšā§āĻ›ā§‡

Qt āĻĨā§‡āĻ•ā§‡ STM32 āĻĒā§‹āĻ°ā§āĻŸ āĻ•āĻ°āĻž āĻšāĻšā§āĻ›ā§‡āĻļā§āĻ­ āĻ…āĻĒāĻ°āĻžāĻšā§āĻ¨ āĻ†āĻŽāĻ°āĻž āĻĒā§āĻ°āĻ•āĻ˛ā§āĻĒā§‡ āĻ†āĻ›āĻŋ āĻāĻŽāĻŦāĻ•ā§āĻ¸ STM32F7-āĻĄāĻŋāĻ¸āĻ•āĻ­āĻžāĻ°āĻŋāĻ¤ā§‡ Qt āĻšāĻžāĻ˛ā§ āĻ•āĻ°ā§‡āĻ›ā§‡ āĻāĻŦāĻ‚ āĻāĻŸāĻŋ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡ āĻ•āĻĨāĻž āĻŦāĻ˛āĻ¤ā§‡ āĻšāĻžāĻ‡āĨ¤ āĻāĻ° āĻ†āĻ—ā§‡, āĻ†āĻŽāĻ°āĻž āĻ‡āĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§‡āĻ‡ āĻŦāĻ˛ā§‡āĻ›āĻŋ āĻ•āĻŋāĻ­āĻžāĻŦā§‡ āĻ†āĻŽāĻ°āĻž āĻšāĻžāĻ˛ā§ āĻ•āĻ°āĻ¤ā§‡ āĻĒā§‡āĻ°ā§‡āĻ›āĻŋ OpenCV.

Qt āĻšāĻ˛ āĻāĻ•āĻŸāĻŋ āĻ•ā§āĻ°āĻ¸-āĻĒā§āĻ˛ā§āĻ¯āĻžāĻŸāĻĢāĻ°ā§āĻŽ āĻĢā§āĻ°ā§‡āĻŽāĻ“āĻ¯āĻŧāĻžāĻ°ā§āĻ• āĻ¯āĻž āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻ—ā§āĻ°āĻžāĻĢāĻŋāĻ•āĻžāĻ˛ āĻ‰āĻĒāĻžāĻĻāĻžāĻ¨āĻ—ā§āĻ˛āĻŋāĻ‡ āĻ¨āĻ¯āĻŧ, QtNetwork, āĻĄā§‡āĻŸāĻžāĻŦā§‡āĻ¸ā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻ•āĻžāĻœ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ•ā§āĻ˛āĻžāĻ¸ā§‡āĻ° āĻāĻ•āĻŸāĻŋ āĻ¸ā§‡āĻŸ, āĻ…āĻŸā§‹āĻŽā§‡āĻļāĻ¨ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ Qt (IoT āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ āĻ¸āĻš) āĻāĻŦāĻ‚ āĻ†āĻ°āĻ“ āĻ…āĻ¨ā§‡āĻ• āĻ•āĻŋāĻ›ā§ āĻ…āĻ¨ā§āĻ¤āĻ°ā§āĻ­ā§āĻ•ā§āĻ¤ āĻ•āĻ°ā§‡āĨ¤ Qt āĻŸāĻŋāĻŽā§‡āĻ° āĻŦāĻŋāĻ•āĻžāĻļāĻ•āĻžāĻ°ā§€āĻ°āĻž āĻāĻŽāĻŦā§‡āĻĄā§‡āĻĄ āĻ¸āĻŋāĻ¸ā§āĻŸā§‡āĻŽā§‡ Qt-āĻāĻ° āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°ā§‡āĻ° āĻĒā§‚āĻ°ā§āĻŦāĻžāĻ­āĻžāĻ¸ āĻĻāĻŋāĻ¯āĻŧā§‡āĻ›ā§‡āĻ¨, āĻ¤āĻžāĻ‡ āĻ˛āĻžāĻ‡āĻŦā§āĻ°ā§‡āĻ°āĻŋāĻ—ā§āĻ˛āĻŋ āĻŦā§‡āĻļ āĻ­āĻžāĻ˛āĻ­āĻžāĻŦā§‡ āĻ•āĻ¨āĻĢāĻŋāĻ—āĻžāĻ°āĻ¯ā§‹āĻ—ā§āĻ¯āĨ¤ āĻ¯āĻžāĻ‡āĻšā§‹āĻ•, āĻ¸āĻŽā§āĻĒā§āĻ°āĻ¤āĻŋ āĻ…āĻŦāĻ§āĻŋ, āĻ–ā§āĻŦ āĻ•āĻŽ āĻ˛ā§‹āĻ•āĻ‡ āĻŽāĻžāĻ‡āĻ•ā§āĻ°ā§‹āĻ•āĻ¨ā§āĻŸā§āĻ°ā§‹āĻ˛āĻžāĻ°ā§‡ Qt āĻĒā§‹āĻ°ā§āĻŸ āĻ•āĻ°āĻžāĻ° āĻ•āĻĨāĻž āĻ­ā§‡āĻŦā§‡āĻ›āĻŋāĻ˛, āĻ¸āĻŽā§āĻ­āĻŦāĻ¤ āĻāĻ‡ āĻ§āĻ°āĻ¨ā§‡āĻ° āĻ•āĻžāĻœāĻŸāĻŋ āĻ•āĻ āĻŋāĻ¨ āĻŦāĻ˛ā§‡ āĻŽāĻ¨ā§‡ āĻšāĻšā§āĻ›ā§‡ - Qt āĻŦāĻĄāĻŧ, MCU āĻ›ā§‹āĻŸāĨ¤

āĻ…āĻ¨ā§āĻ¯āĻĻāĻŋāĻ•ā§‡, āĻāĻ‡ āĻŽā§āĻšā§āĻ°ā§āĻ¤ā§‡ āĻŽāĻžāĻ˛ā§āĻŸāĻŋāĻŽāĻŋāĻĄāĻŋāĻ¯āĻŧāĻžāĻ° āĻ¸āĻžāĻĨā§‡ āĻ•āĻžāĻœ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻŦāĻ‚ āĻĒā§āĻ°āĻĨāĻŽ āĻĒā§‡āĻ¨ā§āĻŸāĻŋāĻ¯āĻŧāĻžāĻŽāĻ—ā§āĻ˛āĻŋāĻ•ā§‡ āĻ›āĻžāĻĄāĻŧāĻŋāĻ¯āĻŧā§‡ āĻ¯āĻžāĻ“āĻ¯āĻŧāĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻĄāĻŋāĻœāĻžāĻ‡āĻ¨ āĻ•āĻ°āĻž āĻŽāĻžāĻ‡āĻ•ā§āĻ°ā§‹āĻ•āĻ¨ā§āĻŸā§āĻ°ā§‹āĻ˛āĻžāĻ° āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤ āĻĒā§āĻ°āĻžāĻ¯āĻŧ āĻāĻ• āĻŦāĻ›āĻ° āĻ†āĻ—ā§‡ Qt āĻŦā§āĻ˛āĻ—ā§‡ āĻšāĻžāĻœāĻŋāĻ° āĻĒā§‹āĻ¸ā§āĻŸ. āĻŦāĻŋāĻ•āĻžāĻļāĻ•āĻžāĻ°ā§€āĻ°āĻž RTEMS OS-āĻāĻ° āĻ…āĻ§ā§€āĻ¨ā§‡ Qt-āĻāĻ° āĻāĻ•āĻŸāĻŋ āĻĒā§‹āĻ°ā§āĻŸ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°ā§‡āĻ›ā§‡, āĻāĻŦāĻ‚ stm32f7 āĻšāĻ˛āĻŽāĻžāĻ¨ āĻŦā§‡āĻļ āĻ•āĻ¯āĻŧā§‡āĻ•āĻŸāĻŋ āĻŦā§‹āĻ°ā§āĻĄā§‡ āĻ‰āĻ‡āĻœā§‡āĻŸ āĻ¸āĻš āĻ‰āĻĻāĻžāĻšāĻ°āĻŖāĻ—ā§āĻ˛āĻŋ āĻšāĻžāĻ˛āĻŋāĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤ āĻ†āĻŽāĻ°āĻž āĻāĻ‡ āĻŦāĻŋāĻˇāĻ¯āĻŧā§‡ āĻ†āĻ—ā§āĻ°āĻšā§€. āĻāĻŸāĻŋ āĻ˛āĻ•ā§āĻˇāĻŖā§€āĻ¯āĻŧ āĻ›āĻŋāĻ˛, āĻāĻŦāĻ‚ āĻŦāĻŋāĻ•āĻžāĻļāĻ•āĻžāĻ°ā§€āĻ°āĻž āĻ¨āĻŋāĻœā§‡āĻ°āĻžāĻ‡ āĻāĻŸāĻŋ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡ āĻ˛āĻŋāĻ–ā§‡āĻ›ā§‡āĻ¨ āĻ¯ā§‡ Qt STM32F7-Discovery-āĻ āĻ§ā§€āĻ° āĻšāĻ¯āĻŧā§‡ āĻ¯āĻžāĻ¯āĻŧāĨ¤ āĻ†āĻŽāĻ°āĻž āĻ­āĻžāĻŦāĻ›āĻŋāĻ˛āĻžāĻŽ āĻ¯ā§‡ āĻ†āĻŽāĻ°āĻž āĻāĻŽāĻŦāĻ•ā§āĻ¸ā§‡āĻ° āĻ…āĻ§ā§€āĻ¨ā§‡ Qt āĻšāĻžāĻ˛āĻžāĻ¤ā§‡ āĻĒāĻžāĻ°āĻŋ, āĻāĻŦāĻ‚ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻāĻ•āĻŸāĻŋ āĻ‰āĻ‡āĻœā§‡āĻŸ āĻ†āĻāĻ•āĻ¤ā§‡ āĻĒāĻžāĻ°āĻŋ āĻ¨āĻž, āĻāĻ•āĻŸāĻŋ āĻ…ā§āĻ¯āĻžāĻ¨āĻŋāĻŽā§‡āĻļāĻ¨ āĻšāĻžāĻ˛āĻžāĻ¤ā§‡ āĻĒāĻžāĻ°āĻŋāĨ¤

Qt 4.8 āĻĻā§€āĻ°ā§āĻ˜ āĻ¸āĻŽāĻ¯āĻŧā§‡āĻ° āĻœāĻ¨ā§āĻ¯ Embox āĻ āĻĒā§‹āĻ°ā§āĻŸ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡, āĻ¤āĻžāĻ‡ āĻ†āĻŽāĻ°āĻž āĻāĻŸāĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻžāĻ° āĻ¸āĻŋāĻĻā§āĻ§āĻžāĻ¨ā§āĻ¤ āĻ¨āĻŋāĻ¯āĻŧā§‡āĻ›āĻŋāĨ¤ āĻ†āĻŽāĻ°āĻž āĻŽā§āĻ­āĻŦā§āĻ˛āĻ•āĻ¸ āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨ āĻŦā§‡āĻ›ā§‡ āĻ¨āĻŋāĻ¯āĻŧā§‡āĻ›āĻŋ - āĻ¸ā§āĻĒā§āĻ°āĻŋāĻ‚āĻœāĻŋ āĻ…ā§āĻ¯āĻžāĻ¨āĻŋāĻŽā§‡āĻļāĻ¨ā§‡āĻ° āĻāĻ•āĻŸāĻŋ āĻ‰āĻĻāĻžāĻšāĻ°āĻŖāĨ¤

QEMU-āĻ¤ā§‡ Qt āĻŽā§āĻ­āĻŦā§āĻ˛āĻ•Qt āĻĨā§‡āĻ•ā§‡ STM32 āĻĒā§‹āĻ°ā§āĻŸ āĻ•āĻ°āĻž āĻšāĻšā§āĻ›ā§‡

āĻļā§āĻ°ā§ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯, āĻ†āĻŽāĻ°āĻž āĻ¸āĻŽā§āĻ­āĻŦ āĻšāĻ˛ā§‡ āĻ…ā§āĻ¯āĻžāĻ¨āĻŋāĻŽā§‡āĻļāĻ¨ āĻ¸āĻŽāĻ°ā§āĻĨāĻ¨ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ā§€āĻ¯āĻŧ āĻ‰āĻĒāĻžāĻĻāĻžāĻ¨āĻ—ā§āĻ˛āĻŋāĻ° āĻ¨ā§āĻ¯ā§‚āĻ¨āĻ¤āĻŽ āĻ¸ā§‡āĻŸā§‡āĻ° āĻ¸āĻžāĻĨā§‡ Qt āĻ•āĻ¨āĻĢāĻŋāĻ—āĻžāĻ° āĻ•āĻ°āĻŋāĨ¤ āĻāĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻŦāĻŋāĻ•āĻ˛ā§āĻĒ āĻ†āĻ›ā§‡ "-qconfig minimal,small, medium..."āĨ¤ āĻāĻŸāĻŋāĻ¤ā§‡ āĻ…āĻ¨ā§‡āĻ•āĻ—ā§āĻ˛āĻŋ āĻŽā§āĻ¯āĻžāĻ•ā§āĻ°ā§‹ āĻ¸āĻš Qt āĻĨā§‡āĻ•ā§‡ āĻāĻ•āĻŸāĻŋ āĻ•āĻ¨āĻĢāĻŋāĻ—āĻžāĻ°ā§‡āĻļāĻ¨ āĻĢāĻžāĻ‡āĻ˛ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡ - āĻ•ā§€ āĻ¸āĻ•ā§āĻˇāĻŽ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡ / āĻ•ā§€ āĻ¨āĻŋāĻˇā§āĻ•ā§āĻ°āĻŋāĻ¯āĻŧ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡ā§ˇ āĻāĻ‡ āĻŦāĻŋāĻ•āĻ˛ā§āĻĒā§‡āĻ° āĻĒāĻ°ā§‡, āĻ†āĻŽāĻ°āĻž āĻ¯āĻĻāĻŋ āĻ…āĻ¤āĻŋāĻ°āĻŋāĻ•ā§āĻ¤ āĻ•āĻŋāĻ›ā§ āĻ…āĻ•ā§āĻˇāĻŽ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻžāĻ‡ āĻ¤āĻŦā§‡ āĻ†āĻŽāĻ°āĻž āĻ•āĻ¨āĻĢāĻŋāĻ—āĻžāĻ°ā§‡āĻļāĻ¨ā§‡ āĻ…āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻĒāĻ¤āĻžāĻ•āĻž āĻ¯ā§āĻ•ā§āĻ¤ āĻ•āĻ°āĻŋāĨ¤ āĻāĻ–āĻžāĻ¨ā§‡ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻāĻ•āĻŸāĻŋ āĻ‰āĻĻāĻžāĻšāĻ°āĻŖ āĻ•āĻ¨āĻĢāĻŋāĻ—āĻžāĻ°ā§‡āĻļāĻ¨.

Qt āĻ•āĻžāĻœ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯, āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻāĻ•āĻŸāĻŋ OS āĻ¸āĻžāĻŽāĻžā§āĻœāĻ¸ā§āĻ¯āĻĒā§‚āĻ°ā§āĻŖ āĻ¸ā§āĻ¤āĻ° āĻ¯ā§‹āĻ— āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡āĨ¤ āĻāĻ•āĻŸāĻŋ āĻ‰āĻĒāĻžāĻ¯āĻŧ āĻšāĻ˛ QPA (Qt Platform Abstraction) āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ āĻ•āĻ°āĻžāĨ¤ Qt-āĻāĻ° āĻ…āĻ‚āĻļ āĻšāĻŋāĻ¸āĻžāĻŦā§‡ āĻĒā§āĻ°āĻ¸ā§āĻ¤ā§āĻ¤-āĻ¤ā§ˆāĻ°āĻŋ fb_base āĻĒā§āĻ˛āĻžāĻ—āĻ‡āĻ¨āĻŸāĻŋāĻ•ā§‡ āĻāĻ•āĻŸāĻŋ āĻ­āĻŋāĻ¤ā§āĻ¤āĻŋ āĻšāĻŋāĻ¸āĻžāĻŦā§‡ āĻ¨ā§‡āĻ“āĻ¯āĻŧāĻž āĻšāĻ¯āĻŧā§‡āĻ›āĻŋāĻ˛, āĻ¯āĻžāĻ° āĻ­āĻŋāĻ¤ā§āĻ¤āĻŋāĻ¤ā§‡ āĻ˛āĻŋāĻ¨āĻžāĻ•ā§āĻ¸ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ QPA āĻ•āĻžāĻœ āĻ•āĻ°ā§‡āĨ¤ āĻĢāĻ˛āĻžāĻĢāĻ˛ āĻšāĻ˛ āĻāĻ•āĻŸāĻŋ āĻ›ā§‹āĻŸ āĻāĻŽāĻŦāĻ•ā§āĻ¸āĻāĻĢāĻŦāĻŋ āĻĒā§āĻ˛āĻžāĻ—āĻ‡āĻ¨ āĻ¯āĻž āĻāĻŽāĻŦāĻ•ā§āĻ¸ā§‡āĻ° āĻĢā§āĻ°ā§‡āĻŽāĻŦāĻžāĻĢāĻžāĻ°ā§‡āĻ° āĻ¸āĻžāĻĨā§‡ Qt āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻ•āĻ°ā§‡ āĻāĻŦāĻ‚ āĻ¤āĻžāĻ°āĻĒāĻ° āĻāĻŸāĻŋ āĻŦāĻžāĻ‡āĻ°ā§‡āĻ° āĻ¸āĻžāĻšāĻžāĻ¯ā§āĻ¯ āĻ›āĻžāĻĄāĻŧāĻžāĻ‡ āĻ¸ā§‡āĻ–āĻžāĻ¨ā§‡ āĻ†āĻāĻ•ā§‡āĨ¤

āĻāĻ‡ āĻĒā§āĻ˛āĻžāĻ—āĻ‡āĻ¨ āĻŽāĻ¤ āĻĻā§‡āĻ–āĻžāĻ¯āĻŧ āĻ•āĻŋ

QEmboxFbIntegration::QEmboxFbIntegration()
    : fontDb(new QGenericUnixFontDatabase())
{
    struct fb_var_screeninfo vinfo;
    struct fb_fix_screeninfo finfo;
    const char *fbPath = "/dev/fb0";

    fbFd = open(fbPath, O_RDWR);
    if (fbPath < 0) {
        qFatal("QEmboxFbIntegration: Error open framebuffer %s", fbPath);
    }
    if (ioctl(fbFd, FBIOGET_FSCREENINFO, &finfo) == -1) {
        qFatal("QEmboxFbIntegration: Error ioctl framebuffer %s", fbPath);
    }
    if (ioctl(fbFd, FBIOGET_VSCREENINFO, &vinfo) == -1) {
        qFatal("QEmboxFbIntegration: Error ioctl framebuffer %s", fbPath);
    }
    fbWidth        = vinfo.xres;
    fbHeight       = vinfo.yres;
    fbBytesPerLine = finfo.line_length;
    fbSize         = fbBytesPerLine * fbHeight;
    fbFormat       = vinfo.fmt;
    fbData = (uint8_t *)mmap(0, fbSize, PROT_READ | PROT_WRITE,
                             MAP_SHARED, fbFd, 0);
    if (fbData == MAP_FAILED) {
        qFatal("QEmboxFbIntegration: Error mmap framebuffer %s", fbPath);
    }
    if (!fbData || !fbSize) {
        qFatal("QEmboxFbIntegration: Wrong framebuffer: base = %p,"
               "size=%d", fbData, fbSize);
    }

    mPrimaryScreen = new QEmboxFbScreen(fbData, fbWidth,
                                        fbHeight, fbBytesPerLine,
                                        emboxFbFormatToQImageFormat(fbFormat));

    mPrimaryScreen->setPhysicalSize(QSize(fbWidth, fbHeight));
    mScreens.append(mPrimaryScreen);

    this->printFbInfo();
}

āĻāĻŦāĻ‚ āĻāĻ‡āĻ­āĻžāĻŦā§‡ redraw āĻĻā§‡āĻ–āĻ¤ā§‡ āĻšāĻŦā§‡

QRegion QEmboxFbScreen::doRedraw()
{
    QVector<QRect> rects;
    QRegion touched = QFbScreen::doRedraw();

    DPRINTF("QEmboxFbScreen::doRedrawn");

    if (!compositePainter) {
        compositePainter = new QPainter(mFbScreenImage);
    }

    rects = touched.rects();
    for (int i = 0; i < rects.size(); i++) {
        compositePainter->drawImage(rects[i], *mScreenImage, rects[i]);
    }
    return touched;
}

āĻĢāĻ˛āĻ¸ā§āĻŦāĻ°ā§‚āĻĒ, āĻŽā§‡āĻŽāĻ°āĻŋ āĻ†āĻ•āĻžāĻ°ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ•āĻŽā§āĻĒāĻžāĻ‡āĻ˛āĻžāĻ° āĻ…āĻĒā§āĻŸāĻŋāĻŽāĻžāĻ‡āĻœā§‡āĻļāĻžāĻ¨ āĻ¸āĻ•ā§āĻˇāĻŽ -Os, āĻ˛āĻžāĻ‡āĻŦā§āĻ°ā§‡āĻ°āĻŋ āĻšāĻŋāĻ¤ā§āĻ°āĻŸāĻŋ 3.5 āĻāĻŽāĻŦāĻŋ āĻšāĻ¯āĻŧā§‡ āĻ‰āĻ ā§‡āĻ›ā§‡, āĻ¯āĻž āĻ…āĻŦāĻļā§āĻ¯āĻ‡ STM32F746 āĻāĻ° āĻŽā§‚āĻ˛ āĻŽā§‡āĻŽāĻ°āĻŋāĻ° āĻ¸āĻžāĻĨā§‡ āĻ–āĻžāĻĒ āĻ–āĻžāĻ¯āĻŧ āĻ¨āĻžāĨ¤ āĻ¯ā§‡āĻŽāĻ¨āĻŸāĻŋ āĻ†āĻŽāĻ°āĻž OpenCV āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ…āĻ¨ā§āĻ¯ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§ā§‡ āĻ˛āĻŋāĻ–ā§‡āĻ›āĻŋ, āĻāĻ‡ āĻŦā§‹āĻ°ā§āĻĄā§‡ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡:

  • 1 āĻāĻŽāĻŦāĻŋ āĻ°āĻŽ
  • 320 KB RAM
  • 8 MB SDRAM
  • 16 MB QSPI

āĻ¯ā§‡āĻšā§‡āĻ¤ā§ QSPI āĻĨā§‡āĻ•ā§‡ āĻ•ā§‹āĻĄ āĻšāĻžāĻ˛āĻžāĻ¨ā§‹āĻ° āĻœāĻ¨ā§āĻ¯ āĻ¸āĻŽāĻ°ā§āĻĨāĻ¨ āĻ‡āĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§‡āĻ‡ OpenCV-āĻāĻ° āĻœāĻ¨ā§āĻ¯ āĻ¯ā§‹āĻ— āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡, āĻ¤āĻžāĻ‡ āĻ†āĻŽāĻ°āĻž QT-āĻāĻ° āĻ¸āĻžāĻĨā§‡ āĻ¸āĻŽā§āĻĒā§‚āĻ°ā§āĻŖ Embox āĻ‡āĻŽā§‡āĻœ QSPI-āĻ¤ā§‡ āĻ˛ā§‹āĻĄ āĻ•āĻ°āĻžāĻ° āĻ¸āĻŋāĻĻā§āĻ§āĻžāĻ¨ā§āĻ¤ āĻ¨āĻŋāĻ¯āĻŧā§‡āĻ›āĻŋāĨ¤ āĻāĻŦāĻ‚ āĻšā§āĻ°āĻ°ā§‡, QSPI āĻĨā§‡āĻ•ā§‡ āĻĒā§āĻ°āĻžāĻ¯āĻŧ āĻ…āĻŦāĻŋāĻ˛āĻŽā§āĻŦā§‡ āĻ¸āĻŦāĻ•āĻŋāĻ›ā§ āĻļā§āĻ°ā§ āĻšāĻ¯āĻŧ! āĻ•āĻŋāĻ¨ā§āĻ¤ā§ OpenCV-āĻāĻ° āĻ•ā§āĻˇā§‡āĻ¤ā§āĻ°ā§‡, āĻāĻŸāĻŋ āĻ–ā§āĻŦ āĻ§ā§€āĻ° āĻšāĻ¯āĻŧā§‡ āĻ‰āĻ ā§‡āĻ›ā§‡āĨ¤

Qt āĻĨā§‡āĻ•ā§‡ STM32 āĻĒā§‹āĻ°ā§āĻŸ āĻ•āĻ°āĻž āĻšāĻšā§āĻ›ā§‡

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

Qt āĻĨā§‡āĻ•ā§‡ STM32 āĻĒā§‹āĻ°ā§āĻŸ āĻ•āĻ°āĻž āĻšāĻšā§āĻ›ā§‡

āĻ¤āĻžāĻ°āĻĒāĻ°ā§‡ āĻāĻ•āĻŸāĻŋ āĻ­āĻžāĻ¸āĻŽāĻžāĻ¨ āĻŦāĻŋāĻ¨ā§āĻĻā§ āĻ…āĻ¨ā§āĻ¤āĻ°ā§āĻ­ā§āĻ•ā§āĻ¤ āĻ•āĻ°āĻžāĻ° āĻ§āĻžāĻ°āĻŖāĻž āĻ›āĻŋāĻ˛ - āĻ¸āĻ°ā§āĻŦā§‹āĻĒāĻ°āĻŋ, Qt āĻ…ā§āĻ¯āĻžāĻ¨āĻŋāĻŽā§‡āĻļāĻ¨ā§‡ āĻ¸ā§āĻ•ā§‹āĻ¯āĻŧāĻžāĻ°āĻ—ā§āĻ˛āĻŋāĻ° āĻ¸ā§āĻĨāĻžāĻ¨āĻžāĻ™ā§āĻ•āĻ—ā§āĻ˛āĻŋāĻ° āĻ•āĻŋāĻ›ā§ āĻ—āĻŖāĻ¨āĻž āĻ•āĻ°ā§‡āĨ¤ āĻ†āĻŽāĻ°āĻž āĻšā§‡āĻˇā§āĻŸāĻž āĻ•āĻ°ā§‡āĻ›āĻŋ, āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻāĻ–āĻžāĻ¨ā§‡ āĻ†āĻŽāĻ°āĻž āĻāĻ•āĻŸāĻŋ āĻĻā§ƒāĻļā§āĻ¯āĻŽāĻžāĻ¨ āĻ¤ā§āĻŦāĻ°āĻŖ āĻĒāĻžāĻ‡āĻ¨āĻŋ, āĻ¯āĻĻāĻŋāĻ“ āĻ­āĻŋāĻ¤āĻ°ā§‡ āĻĒā§āĻ°āĻŦāĻ¨ā§āĻ§ Qt āĻŦāĻŋāĻ•āĻžāĻļāĻ•āĻžāĻ°ā§€āĻ°āĻž āĻĻāĻžāĻŦāĻŋ āĻ•āĻ°ā§‡āĻ›ā§‡ āĻ¯ā§‡ FPU āĻŸāĻžāĻšāĻ¸ā§āĻ•ā§āĻ°ā§€āĻ¨ā§‡ "āĻĄā§āĻ°ā§āĻ¯āĻžāĻ—āĻŋāĻ‚ āĻ…ā§āĻ¯āĻžāĻ¨āĻŋāĻŽā§‡āĻļāĻ¨" āĻāĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻ‰āĻ˛ā§āĻ˛ā§‡āĻ–āĻ¯ā§‹āĻ—ā§āĻ¯ āĻ—āĻ¤āĻŋ āĻŦā§ƒāĻĻā§āĻ§āĻŋ āĻ•āĻ°ā§‡āĨ¤ āĻŽā§āĻ­āĻŦā§āĻ˛āĻ•āĻ—ā§āĻ˛āĻŋāĻ¤ā§‡ āĻ‰āĻ˛ā§āĻ˛ā§‡āĻ–āĻ¯ā§‹āĻ—ā§āĻ¯āĻ­āĻžāĻŦā§‡ āĻ•āĻŽ āĻ­āĻžāĻ¸āĻŽāĻžāĻ¨ āĻĒāĻ¯āĻŧā§‡āĻ¨ā§āĻŸ āĻ—āĻŖāĻ¨āĻž āĻšāĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡ āĻāĻŦāĻ‚ āĻāĻŸāĻŋ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻŸ āĻ‰āĻĻāĻžāĻšāĻ°āĻŖā§‡āĻ° āĻ‰āĻĒāĻ° āĻ¨āĻŋāĻ°ā§āĻ­āĻ° āĻ•āĻ°ā§‡āĨ¤

āĻĢā§āĻ°ā§‡āĻŽāĻŦāĻžāĻĢāĻžāĻ°āĻŸāĻŋāĻ•ā§‡ SDRAM āĻĨā§‡āĻ•ā§‡ āĻ…āĻ­ā§āĻ¯āĻ¨ā§āĻ¤āĻ°ā§€āĻŖ āĻŽā§‡āĻŽāĻ°āĻŋāĻ¤ā§‡ āĻ¸ā§āĻĨāĻžāĻ¨āĻžāĻ¨ā§āĻ¤āĻ° āĻ•āĻ°āĻžāĻ° āĻ§āĻžāĻ°āĻŖāĻžāĻŸāĻŋ āĻ¸āĻŦāĻšā§‡āĻ¯āĻŧā§‡ āĻ•āĻžāĻ°ā§āĻ¯āĻ•āĻ° āĻŦāĻ˛ā§‡ āĻĒā§āĻ°āĻŽāĻžāĻŖāĻŋāĻ¤ āĻšāĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤ āĻāĻŸāĻŋ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯, āĻ†āĻŽāĻ°āĻž āĻĒāĻ°ā§āĻĻāĻžāĻ° āĻ†āĻ•āĻžāĻ° 480x272 āĻ¨āĻ¯āĻŧ, 272x272 āĻ•āĻ°ā§‡āĻ›āĻŋāĨ¤ āĻ†āĻŽāĻ°āĻž āĻ°āĻ™ā§‡āĻ° āĻ—āĻ­ā§€āĻ°āĻ¤āĻž A8R8G8B8 āĻĨā§‡āĻ•ā§‡ R5G6B5-āĻ āĻ•āĻŽāĻŋāĻ¯āĻŧā§‡āĻ›āĻŋ, āĻāĻ‡āĻ­āĻžāĻŦā§‡ āĻāĻ• āĻĒāĻŋāĻ•ā§āĻ¸ā§‡āĻ˛ā§‡āĻ° āĻ†āĻ•āĻžāĻ° 4 āĻĨā§‡āĻ•ā§‡ 2 āĻŦāĻžāĻ‡āĻŸ āĻ•āĻŽāĻŋāĻ¯āĻŧā§‡āĻ›āĻŋāĨ¤ āĻ†āĻŽāĻ°āĻž āĻĢā§āĻ°ā§‡āĻŽāĻŦāĻžāĻĢāĻžāĻ° āĻ¸āĻžāĻ‡āĻœ āĻĒā§‡āĻ¯āĻŧā§‡āĻ›āĻŋ 272*272*2 = 147968 āĻŦāĻžāĻ‡āĻŸāĨ¤ āĻāĻŸāĻŋ āĻāĻ•āĻŸāĻŋ āĻ‰āĻ˛ā§āĻ˛ā§‡āĻ–āĻ¯ā§‹āĻ—ā§āĻ¯ āĻ—āĻ¤āĻŋ āĻĻāĻŋāĻ¯āĻŧā§‡āĻ›ā§‡, āĻ¸āĻŽā§āĻ­āĻŦāĻ¤ āĻ¸āĻŦāĻšā§‡āĻ¯āĻŧā§‡ āĻ˛āĻ•ā§āĻˇāĻŖā§€āĻ¯āĻŧ, āĻ…ā§āĻ¯āĻžāĻ¨āĻŋāĻŽā§‡āĻļāĻ¨āĻŸāĻŋ āĻĒā§āĻ°āĻžāĻ¯āĻŧ āĻŽāĻ¸ā§ƒāĻŖ āĻšāĻ¯āĻŧā§‡ āĻ‰āĻ ā§‡āĻ›ā§‡āĨ¤

āĻ¸āĻ°ā§āĻŦāĻļā§‡āĻˇ āĻ…āĻĒā§āĻŸāĻŋāĻŽāĻžāĻ‡āĻœā§‡āĻļāĻžāĻ¨āĻŸāĻŋ āĻ›āĻŋāĻ˛ RAM āĻĨā§‡āĻ•ā§‡ Embox āĻ•ā§‹āĻĄ āĻāĻŦāĻ‚ SDRAM āĻĨā§‡āĻ•ā§‡ Qt āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻ— āĻ•āĻ°āĻžāĨ¤ āĻāĻŸāĻŋ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯, āĻ†āĻŽāĻ°āĻž āĻĒā§āĻ°āĻĨāĻŽā§‡, āĻ¯āĻĨāĻžāĻ°ā§€āĻ¤āĻŋ, āĻ¸ā§āĻĨāĻŋāĻ°āĻ­āĻžāĻŦā§‡ Qt-āĻāĻ° āĻ¸āĻžāĻĨā§‡ Embox āĻ˛āĻŋāĻ™ā§āĻ• āĻ•āĻ°āĻŋ, āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻ†āĻŽāĻ°āĻž āĻ˛āĻžāĻ‡āĻŦā§āĻ°ā§‡āĻ°āĻŋāĻ° āĻĒāĻžāĻ ā§āĻ¯, āĻ°ā§‹āĻĄāĻžāĻŸāĻž, āĻĄā§‡āĻŸāĻž āĻāĻŦāĻ‚ bss āĻŦāĻŋāĻ­āĻžāĻ—āĻ—ā§āĻ˛āĻŋāĻ•ā§‡ QSPI-āĻ¤ā§‡ āĻ°āĻžāĻ–āĻŋ āĻ¯āĻžāĻ¤ā§‡ āĻāĻŸāĻŋ āĻĒāĻ°ā§‡ SDRAM-āĻ āĻ…āĻ¨ā§āĻ˛āĻŋāĻĒāĻŋ āĻ•āĻ°āĻž āĻ¯āĻžāĻ¯āĻŧāĨ¤

section (qt_text, SDRAM, QSPI)
phdr	(qt_text, PT_LOAD, FLAGS(5))

section (qt_rodata, SDRAM, QSPI)
phdr	(qt_rodata, PT_LOAD, FLAGS(5))

section (qt_data, SDRAM, QSPI)
phdr	(qt_data, PT_LOAD, FLAGS(6))

section (qt_bss, SDRAM, QSPI)
phdr	(qt_bss, PT_LOAD, FLAGS(6))

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


āĻ‡āĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§‡āĻ‡ āĻāĻ•ā§‡āĻŦāĻžāĻ°ā§‡ āĻļā§‡āĻˇā§‡āĻ° āĻĻāĻŋāĻ•ā§‡, āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§āĻŸāĻŋ āĻĒā§āĻ°āĻ¸ā§āĻ¤ā§āĻ¤ āĻ•āĻ°āĻž āĻāĻŦāĻ‚ Embox-āĻāĻ° āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āĻ¨ āĻ•āĻ¨āĻĢāĻŋāĻ—āĻžāĻ°ā§‡āĻļāĻ¨ āĻšā§‡āĻˇā§āĻŸāĻž āĻ•āĻ°ā§‡ āĻĻā§‡āĻ–āĻž āĻ—ā§‡āĻ˛ āĻ¯ā§‡ QT āĻŽā§āĻ­āĻŦā§āĻ˛āĻ•āĻ—ā§āĻ˛āĻŋ SDRAM-āĻ āĻāĻ•āĻŸāĻŋ āĻĢā§āĻ°ā§‡āĻŽāĻŦāĻžāĻĢāĻžāĻ° āĻ¸āĻš QSPI āĻĨā§‡āĻ•ā§‡ āĻĻā§āĻ°ā§āĻĻāĻžāĻ¨ā§āĻ¤ āĻ•āĻžāĻœ āĻ•āĻ°ā§‡, āĻāĻŦāĻ‚ āĻŦāĻžāĻ§āĻžāĻŸāĻŋ āĻ āĻŋāĻ• āĻĢā§āĻ°ā§‡āĻŽāĻŦāĻžāĻĢāĻžāĻ°ā§‡āĻ° āĻ†āĻ•āĻžāĻ° āĻ›āĻŋāĻ˛! āĻ¸ā§āĻĒāĻˇā§āĻŸāĻ¤āĻ‡, āĻĒā§āĻ°āĻžāĻĨāĻŽāĻŋāĻ• "āĻ¸ā§āĻ˛āĻžāĻ‡āĻĄāĻļā§‹" āĻ•āĻžāĻŸāĻŋāĻ¯āĻŧā§‡ āĻ‰āĻ āĻ¤ā§‡, āĻĢā§āĻ°ā§‡āĻŽāĻŦāĻžāĻĢāĻžāĻ°ā§‡āĻ° āĻ†āĻ•āĻžāĻ°ā§‡ āĻāĻ•āĻŸāĻŋ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ āĻšā§āĻ°āĻžāĻ¸ā§‡āĻ° āĻ•āĻžāĻ°āĻŖā§‡ āĻāĻ•āĻŸāĻŋ 2-āĻ—ā§āĻŖ āĻ¤ā§āĻŦāĻ°āĻŖ āĻ¯āĻĨā§‡āĻˇā§āĻŸ āĻ›āĻŋāĻ˛āĨ¤ āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻāĻŽāĻŦāĻ•ā§āĻ¸ āĻ•ā§‹āĻĄāĻ•ā§‡ āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āĻ¨ āĻĻā§āĻ°ā§āĻ¤ āĻ¸ā§āĻŽā§ƒāĻ¤āĻŋāĻ¤ā§‡ āĻ¸ā§āĻĨāĻžāĻ¨āĻžāĻ¨ā§āĻ¤āĻ° āĻ•āĻ°ā§‡ āĻāĻŽāĻ¨ āĻĢāĻ˛āĻžāĻĢāĻ˛ āĻ…āĻ°ā§āĻœāĻ¨ āĻ•āĻ°āĻž āĻ¸āĻŽā§āĻ­āĻŦ āĻ›āĻŋāĻ˛ āĻ¨āĻž (āĻ¤ā§āĻŦāĻ°āĻŖ 2 āĻ¨āĻ¯āĻŧ, āĻĒā§āĻ°āĻžāĻ¯āĻŧ 1.5 āĻ—ā§āĻŖ)āĨ¤

āĻ•āĻŋāĻ­āĻžāĻŦā§‡ āĻ¨āĻŋāĻœā§‡ āĻšā§‡āĻˇā§āĻŸāĻž āĻ•āĻ°āĻŦā§‡āĻ¨

āĻ†āĻĒāĻ¨āĻžāĻ° āĻ¯āĻĻāĻŋ STM32F7-Discovery āĻĨāĻžāĻ•ā§‡, āĻ¤āĻžāĻšāĻ˛ā§‡ āĻ†āĻĒāĻ¨āĻŋ āĻ¨āĻŋāĻœā§‡āĻ‡ Embox āĻāĻ° āĻ…āĻ§ā§€āĻ¨ā§‡ Qt āĻšāĻžāĻ˛āĻžāĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨āĨ¤ āĻ†āĻĒāĻ¨āĻŋ āĻĒāĻĄāĻŧāĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨ āĻāĻŸāĻž āĻ•āĻŋāĻ­āĻžāĻŦā§‡ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ‰āĻ‡āĻ•āĻŋ.

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

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

āĻ āĻŦāĻ›āĻ° āĻ†āĻŽāĻ°āĻž āĻ‰ā§ŽāĻ¸āĻŦā§‡ āĻ…āĻ‚āĻļāĻ—ā§āĻ°āĻšāĻŖ āĻ•āĻ°āĻŦ āĻŸā§‡āĻ• āĻŸā§āĻ°ā§‡āĻ¨. āĻ¸ā§‡āĻ–āĻžāĻ¨ā§‡ āĻ†āĻŽāĻ°āĻž āĻ†āĻ°āĻ“ āĻŦāĻŋāĻ¸ā§āĻ¤āĻžāĻ°āĻŋāĻ¤āĻ­āĻžāĻŦā§‡ āĻŦāĻ˛āĻŦ āĻāĻŦāĻ‚ āĻŽāĻžāĻ‡āĻ•ā§āĻ°ā§‹āĻ•āĻ¨ā§āĻŸā§āĻ°ā§‹āĻ˛āĻžāĻ°āĻ—ā§āĻ˛āĻŋāĻ¤ā§‡ Qt, OpenCV āĻāĻŦāĻ‚ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ…āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻ…āĻ°ā§āĻœāĻ¨āĻ—ā§āĻ˛āĻŋ āĻĻā§‡āĻ–āĻžāĻŦāĨ¤

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

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