Computer Vision 101: Let's Build a Face Swapper in Python

بواسطة: Skillshare

Overview

How does a face swap work? What is computer vision?

In this course, we will explore computer vision fundamentals as you build a Snapchat-esque face swap application; for those unfamiliar with Snapchat, this filter will detect pairs of faces and swap them, making for a silly effect. This class was made for beginners that have a little familiarity with machine learning and coding. If you aren’t already familiar, that’s okay, these two courses will you caught up quickly:

  1. To learn Python, I suggest taking my Coding 101: Python for Beginners course.
  2. To learn the basics of AI and machine learning, take my Artificial Intelligence MasterClass: Tools to Master Machine Learning course.

We’ll cover many topics and takeaways:

  • Build a Face Swapping application
  • What computer vision is
  • Break down face swapping AI products into ML problems
  • Break down face detection ML problem
  • Understand taxonomies of computer vision problems
  • Computer vision concepts like filters, feature extraction, detection etc.

By the end of this course, you’ll have a face-swapping application for you to play with. Show it off to your friends and family!

Still not sure if this course is for you? Try this short 4-minute video. If it sparks your curiosity, this course is definitely yours to take!

If you plan to run this code locally on your own computer, make sure to follow these Installation Instructions before starting the lesson.

Interested in creative coding? Check out my VR 101 (AFrame Nature Scenes) class.

Interested in more data science or machine learning? Check out my Coding 101 (Python), SQL 101 (Database Design), or Data 101 (Analytics) classes.

Follow me on Skillshare to be the first to hear about more courses in these areas!

Syllabus

  • Introduction
  • What is Computer Vision?
  • Code OpenCV Basics
  • How do Face Swaps Work?
  • Code Face Detection
  • How do Face Detectors Work?
  • Code Face Swap
  • Next Steps

Taught by

Alvin Wan

Computer Vision 101: Let's Build a Face Swapper in Python
الذهاب الي الدورة

Computer Vision 101: Let's Build a Face Swapper in Python

بواسطة: Skillshare

  • Skillshare
  • مدفوعة
  • الإنجليزية
  • متاح شهادة
  • متاح في أي وقت
  • intermediate
  • N/A
8.1.2PHP Version336msRequest Duration2MBMemory UsageGET ar/الدورات/{slug}Route
    • Booting (209ms)
    • Application (127ms)
    • 1 x Booting (62.03%)
      208.64ms
      1 x Application (37.73%)
      126.90ms
      14 templates were rendered
      • public.courses.show (resources/views/public/courses/show.blade.php)3bladefile
        Params
        0
        course
        1
        links
        2
        config
      • public.courses.partials.breadcrumbs (resources/views/public/courses/partials/breadcrumbs.blade.php)6bladefile
        Params
        0
        __env
        1
        app
        2
        errors
        3
        course
        4
        links
        5
        config
      • public.courses.partials.heading (resources/views/public/courses/partials/heading.blade.php)7bladefile
        Params
        0
        __env
        1
        app
        2
        errors
        3
        course
        4
        links
        5
        config
        6
        classes
      • public.courses.partials.details (resources/views/public/courses/partials/details.blade.php)6bladefile
        Params
        0
        __env
        1
        app
        2
        errors
        3
        course
        4
        links
        5
        config
      • public.courses.partials.breadcrumbs (resources/views/public/courses/partials/breadcrumbs.blade.php)6bladefile
        Params
        0
        __env
        1
        app
        2
        errors
        3
        course
        4
        links
        5
        config
      • public.courses.partials.heading (resources/views/public/courses/partials/heading.blade.php)7bladefile
        Params
        0
        __env
        1
        app
        2
        errors
        3
        course
        4
        links
        5
        config
        6
        classes
      • public.layouts.main (resources/views/public/layouts/main.blade.php)6bladefile
        Params
        0
        __env
        1
        app
        2
        errors
        3
        course
        4
        links
        5
        config
      • public.layouts.partials.meta (resources/views/public/layouts/partials/meta.blade.php)6bladefile
        Params
        0
        __env
        1
        app
        2
        errors
        3
        course
        4
        links
        5
        config
      • public.layouts.partials.navbar (resources/views/public/layouts/partials/navbar.blade.php)6bladefile
        Params
        0
        __env
        1
        app
        2
        errors
        3
        course
        4
        links
        5
        config
      • public.auth.profile.partials.links (resources/views/public/auth/profile/partials/links.blade.php)6bladefile
        Params
        0
        __env
        1
        app
        2
        errors
        3
        course
        4
        links
        5
        config
      • public.auth.profile.partials.link (resources/views/public/auth/profile/partials/link.blade.php)8bladefile
        Params
        0
        __env
        1
        app
        2
        errors
        3
        course
        4
        links
        5
        config
        6
        route
        7
        title
      • public.auth.profile.partials.link (resources/views/public/auth/profile/partials/link.blade.php)8bladefile
        Params
        0
        __env
        1
        app
        2
        errors
        3
        course
        4
        links
        5
        config
        6
        route
        7
        title
      • public.auth.profile.partials.link (resources/views/public/auth/profile/partials/link.blade.php)8bladefile
        Params
        0
        __env
        1
        app
        2
        errors
        3
        course
        4
        links
        5
        config
        6
        route
        7
        title
      • public.layouts.partials.flash-session (resources/views/public/layouts/partials/flash-session.blade.php)6bladefile
        Params
        0
        __env
        1
        app
        2
        errors
        3
        course
        4
        links
        5
        config
      uri
      GET ar/الدورات/{slug}
      middleware
      web, localize:ar
      controller
      App\Http\Controllers\CourseController@show
      as
      ar.courses.show
      namespace
      prefix
      /ar
      where
      file
      app/Http/Controllers/CourseController.php:17-35
      6 statements were executed10.11ms
      • select * from `courses` where `slug_ar` = 'computer-vision-101:-let\'s-build-a-face-swapper-in-python' limit 1
        8.98ms/app/Http/Controllers/CourseController.php:20corspedia
        Metadata
        Bindings
        • 0. computer-vision-101:-let's-build-a-face-swapper-in-python
        Backtrace
        • 17. /app/Http/Controllers/CourseController.php:20
        • 18. /vendor/laravel/framework/src/Illuminate/Routing/Controller.php:54
        • 19. /vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php:43
        • 20. /vendor/laravel/framework/src/Illuminate/Routing/Route.php:260
        • 21. /vendor/laravel/framework/src/Illuminate/Routing/Route.php:205
      • update `courses` set `visitors` = `visitors` + 1, `courses`.`updated_at` = '2025-01-30 21:06:48' where `id` = 5782
        280μs/app/Http/Controllers/CourseController.php:21corspedia
        Metadata
        Bindings
        • 0. 2025-01-30 21:06:48
        • 1. 5782
        Backtrace
        • 17. /app/Http/Controllers/CourseController.php:21
        • 18. /vendor/laravel/framework/src/Illuminate/Routing/Controller.php:54
        • 19. /vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php:43
        • 20. /vendor/laravel/framework/src/Illuminate/Routing/Route.php:260
        • 21. /vendor/laravel/framework/src/Illuminate/Routing/Route.php:205
      • select `id`, `name_en`, `name_ar`, `topic_id`, `slug_en`, `slug_ar` from `subjects` where `subjects`.`id` in (16)
        220μs/app/Http/Controllers/CourseController.php:23corspedia
        Metadata
        Backtrace
        • 20. /app/Http/Controllers/CourseController.php:23
        • 21. /vendor/laravel/framework/src/Illuminate/Routing/Controller.php:54
        • 22. /vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php:43
        • 23. /vendor/laravel/framework/src/Illuminate/Routing/Route.php:260
        • 24. /vendor/laravel/framework/src/Illuminate/Routing/Route.php:205
      • select `id`, `name_en`, `name_ar`, `slug_en`, `slug_ar` from `topics` where `topics`.`id` in (1)
        180μs/app/Http/Controllers/CourseController.php:23corspedia
        Metadata
        Backtrace
        • 25. /app/Http/Controllers/CourseController.php:23
        • 26. /vendor/laravel/framework/src/Illuminate/Routing/Controller.php:54
        • 27. /vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php:43
        • 28. /vendor/laravel/framework/src/Illuminate/Routing/Route.php:260
        • 29. /vendor/laravel/framework/src/Illuminate/Routing/Route.php:205
      • select * from `providers` where `providers`.`id` in (59) and `providers`.`deleted_at` is null
        210μs/app/Http/Controllers/CourseController.php:23corspedia
        Metadata
        Backtrace
        • 20. /app/Http/Controllers/CourseController.php:23
        • 21. /vendor/laravel/framework/src/Illuminate/Routing/Controller.php:54
        • 22. /vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php:43
        • 23. /vendor/laravel/framework/src/Illuminate/Routing/Route.php:260
        • 24. /vendor/laravel/framework/src/Illuminate/Routing/Route.php:205
      • select * from `html_files` where `html_files`.`id` = 5773 limit 1
        240μs/app/Models/Course.php:84corspedia
        Metadata
        Bindings
        • 0. 5773
        Backtrace
        • 21. /app/Models/Course.php:84
        • 28. view::public.courses.show:29
        • 30. /vendor/laravel/framework/src/Illuminate/Filesystem/Filesystem.php:125
        • 31. /vendor/laravel/framework/src/Illuminate/View/Engines/PhpEngine.php:58
        • 32. /vendor/laravel/framework/src/Illuminate/View/Engines/CompilerEngine.php:72
      App\Models\HtmlFile
      1
      App\Models\Provider
      1
      App\Models\Topic
      1
      App\Models\Subject
      1
      App\Models\Course
      1
        _token
        JjlZcTEdAXjbKTtN5YQnr0ry8mIxRuNtVoBHq2T5
        locale
        ar
        _previous
        array:1 [ "url" => "https://www.corspedia.com/ar/%D8%A7%D9%84%D8%AF%D9%88%D8%B1%D8%A7%D8%AA/comput...
        _flash
        array:2 [ "old" => [] "new" => [] ]
        PHPDEBUGBAR_STACK_DATA
        []
        path_info
        /ar/%D8%A7%D9%84%D8%AF%D9%88%D8%B1%D8%A7%D8%AA/computer-vision-101:-let%27s-build-a-face-swapper-in-python
        status_code
        200
        
        status_text
        OK
        format
        html
        content_type
        text/html; charset=UTF-8
        request_query
        []
        
        request_request
        []
        
        request_headers
        0 of 0
        array:24 [ "sec-ch-ua-mobile" => array:1 [ 0 => "?0" ] "sec-ch-ua" => array:1 [ 0 => ""HeadlessChrome";v="129", "Not=A?Brand";v="8", "Chromium";v="129"" ] "cache-control" => array:1 [ 0 => "no-cache" ] "pragma" => array:1 [ 0 => "no-cache" ] "cdn-loop" => array:1 [ 0 => "cloudflare; loops=1" ] "priority" => array:1 [ 0 => "u=0, i" ] "upgrade-insecure-requests" => array:1 [ 0 => "1" ] "user-agent" => array:1 [ 0 => "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)" ] "cf-connecting-ip" => array:1 [ 0 => "3.17.27.94" ] "accept" => array:1 [ 0 => "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7" ] "sec-fetch-site" => array:1 [ 0 => "none" ] "cf-visitor" => array:1 [ 0 => "{"scheme":"https"}" ] "sec-fetch-mode" => array:1 [ 0 => "navigate" ] "sec-fetch-user" => array:1 [ 0 => "?1" ] "x-forwarded-proto" => array:1 [ 0 => "https" ] "cf-ipcountry" => array:1 [ 0 => "US" ] "accept-encoding" => array:1 [ 0 => "gzip, br" ] "sec-fetch-dest" => array:1 [ 0 => "document" ] "sec-ch-ua-platform" => array:1 [ 0 => ""Windows"" ] "x-forwarded-for" => array:1 [ 0 => "3.17.27.94" ] "cf-ray" => array:1 [ 0 => "90a46d8c5a5b1b67-ORD" ] "host" => array:1 [ 0 => "www.corspedia.com" ] "content-length" => array:1 [ 0 => "" ] "content-type" => array:1 [ 0 => "" ] ]
        request_server
        0 of 0
        array:50 [ "USER" => "www-data" "HOME" => "/var/www" "HTTP_SEC_CH_UA_MOBILE" => "?0" "HTTP_SEC_CH_UA" => ""HeadlessChrome";v="129", "Not=A?Brand";v="8", "Chromium";v="129"" "HTTP_CACHE_CONTROL" => "no-cache" "HTTP_PRAGMA" => "no-cache" "HTTP_CDN_LOOP" => "cloudflare; loops=1" "HTTP_PRIORITY" => "u=0, i" "HTTP_UPGRADE_INSECURE_REQUESTS" => "1" "HTTP_USER_AGENT" => "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)" "HTTP_CF_CONNECTING_IP" => "3.17.27.94" "HTTP_ACCEPT" => "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7" "HTTP_SEC_FETCH_SITE" => "none" "HTTP_CF_VISITOR" => "{"scheme":"https"}" "HTTP_SEC_FETCH_MODE" => "navigate" "HTTP_SEC_FETCH_USER" => "?1" "HTTP_X_FORWARDED_PROTO" => "https" "HTTP_CF_IPCOUNTRY" => "US" "HTTP_ACCEPT_ENCODING" => "gzip, br" "HTTP_SEC_FETCH_DEST" => "document" "HTTP_SEC_CH_UA_PLATFORM" => ""Windows"" "HTTP_X_FORWARDED_FOR" => "3.17.27.94" "HTTP_CF_RAY" => "90a46d8c5a5b1b67-ORD" "HTTP_HOST" => "www.corspedia.com" "REDIRECT_STATUS" => "200" "SERVER_NAME" => "corspedia.com" "SERVER_PORT" => "443" "SERVER_ADDR" => "141.95.147.152" "REMOTE_USER" => "" "REMOTE_PORT" => "35858" "REMOTE_ADDR" => "108.162.216.122" "SERVER_SOFTWARE" => "nginx/1.18.0" "GATEWAY_INTERFACE" => "CGI/1.1" "HTTPS" => "on" "REQUEST_SCHEME" => "https" "SERVER_PROTOCOL" => "HTTP/2.0" "DOCUMENT_ROOT" => "/var/www/corspedia/public" "DOCUMENT_URI" => "/index.php" "REQUEST_URI" => "/ar/%D8%A7%D9%84%D8%AF%D9%88%D8%B1%D8%A7%D8%AA/computer-vision-101:-let%27s-build-a-face-swapper-in-python" "SCRIPT_NAME" => "/index.php" "CONTENT_LENGTH" => "" "CONTENT_TYPE" => "" "REQUEST_METHOD" => "GET" "QUERY_STRING" => "" "SCRIPT_FILENAME" => "/var/www/corspedia/public/index.php" "PATH_INFO" => "" "FCGI_ROLE" => "RESPONDER" "PHP_SELF" => "/index.php" "REQUEST_TIME_FLOAT" => 1738271208.6246 "REQUEST_TIME" => 1738271208 ]
        request_cookies
        []
        
        response_headers
        0 of 0
        array:5 [ "content-type" => array:1 [ 0 => "text/html; charset=UTF-8" ] "cache-control" => array:1 [ 0 => "no-cache, private" ] "date" => array:1 [ 0 => "Thu, 30 Jan 2025 21:06:48 GMT" ] "set-cookie" => array:2 [ 0 => "XSRF-TOKEN=eyJpdiI6InJ5ZDBQdXB2YWZvanBOUUsybDUwM2c9PSIsInZhbHVlIjoiRG5tNUZXeUd1TjJhTlZLSW1GV2NOOHN5MGVFU1lrYmNhUE9mSFVPMVBXZDRGNTBXNVJFclhkb3lVZ1RoQzVDdU1BN0hPc3I3b2pJN1lFUDFxNTVPQk8xQ0JOM0tGaGhFaXhWUzU5Y1RnVUtWSldqVFVnYnh3RHpyUVNJd21Td28iLCJtYWMiOiIxMDQzYmExNTIwOTJiMjAxOTdlMGY4ZDMzNWM5NmJlMTYyZjRhOGI4ZGMyNmIxNmIzMWY2YmE1MzE3N2YxNDFjIiwidGFnIjoiIn0%3D; expires=Thu, 30 Jan 2025 23:06:48 GMT; Max-Age=7200; path=/; samesite=laxXSRF-TOKEN=eyJpdiI6InJ5ZDBQdXB2YWZvanBOUUsybDUwM2c9PSIsInZhbHVlIjoiRG5tNUZXeUd1TjJhTlZLSW1GV2NOOHN5MGVFU1lrYmNhUE9mSFVPMVBXZDRGNTBXNVJFclhkb3lVZ1RoQzVDdU1BN0hPc" 1 => "laravel_session=eyJpdiI6IjRPUEdyQ2xNUEJ6MXJSZHl1TmIyd1E9PSIsInZhbHVlIjoiWDVFb0NXcWZuSkxPZkRZSW1Kays5elhSdFdvVDVEdkkrY1QwLysxTXFIUTg0SzhDM3FMemtsR3lZQmFtbEgvbDJGck5TajZmbHBHOHA1clVoalpEblM2QzBlZmZRZDkwS2pWeW9GUlhiQVZnamJFcFIzellaWUNKTEYwUnZyajciLCJtYWMiOiI0ZjVlMGY3ZDEyNDVjNWEzMGUyZWMwYzc3YzQxNTFlODM5NjQ3ZTc1ZGY4MjY1MTAzNGFmNmE0YmZhMGJlNjdlIiwidGFnIjoiIn0%3D; expires=Thu, 30 Jan 2025 23:06:48 GMT; Max-Age=7200; path=/; httponly; samesite=laxlaravel_session=eyJpdiI6IjRPUEdyQ2xNUEJ6MXJSZHl1TmIyd1E9PSIsInZhbHVlIjoiWDVFb0NXcWZuSkxPZkRZSW1Kays5elhSdFdvVDVEdkkrY1QwLysxTXFIUTg0SzhDM3FMemtsR3lZQmFtbEgvbDJG" ] "Set-Cookie" => array:2 [ 0 => "XSRF-TOKEN=eyJpdiI6InJ5ZDBQdXB2YWZvanBOUUsybDUwM2c9PSIsInZhbHVlIjoiRG5tNUZXeUd1TjJhTlZLSW1GV2NOOHN5MGVFU1lrYmNhUE9mSFVPMVBXZDRGNTBXNVJFclhkb3lVZ1RoQzVDdU1BN0hPc3I3b2pJN1lFUDFxNTVPQk8xQ0JOM0tGaGhFaXhWUzU5Y1RnVUtWSldqVFVnYnh3RHpyUVNJd21Td28iLCJtYWMiOiIxMDQzYmExNTIwOTJiMjAxOTdlMGY4ZDMzNWM5NmJlMTYyZjRhOGI4ZGMyNmIxNmIzMWY2YmE1MzE3N2YxNDFjIiwidGFnIjoiIn0%3D; expires=Thu, 30-Jan-2025 23:06:48 GMT; path=/XSRF-TOKEN=eyJpdiI6InJ5ZDBQdXB2YWZvanBOUUsybDUwM2c9PSIsInZhbHVlIjoiRG5tNUZXeUd1TjJhTlZLSW1GV2NOOHN5MGVFU1lrYmNhUE9mSFVPMVBXZDRGNTBXNVJFclhkb3lVZ1RoQzVDdU1BN0hPc" 1 => "laravel_session=eyJpdiI6IjRPUEdyQ2xNUEJ6MXJSZHl1TmIyd1E9PSIsInZhbHVlIjoiWDVFb0NXcWZuSkxPZkRZSW1Kays5elhSdFdvVDVEdkkrY1QwLysxTXFIUTg0SzhDM3FMemtsR3lZQmFtbEgvbDJGck5TajZmbHBHOHA1clVoalpEblM2QzBlZmZRZDkwS2pWeW9GUlhiQVZnamJFcFIzellaWUNKTEYwUnZyajciLCJtYWMiOiI0ZjVlMGY3ZDEyNDVjNWEzMGUyZWMwYzc3YzQxNTFlODM5NjQ3ZTc1ZGY4MjY1MTAzNGFmNmE0YmZhMGJlNjdlIiwidGFnIjoiIn0%3D; expires=Thu, 30-Jan-2025 23:06:48 GMT; path=/; httponlylaravel_session=eyJpdiI6IjRPUEdyQ2xNUEJ6MXJSZHl1TmIyd1E9PSIsInZhbHVlIjoiWDVFb0NXcWZuSkxPZkRZSW1Kays5elhSdFdvVDVEdkkrY1QwLysxTXFIUTg0SzhDM3FMemtsR3lZQmFtbEgvbDJG" ] ]
        session_attributes
        0 of 0
        array:5 [ "_token" => "JjlZcTEdAXjbKTtN5YQnr0ry8mIxRuNtVoBHq2T5" "locale" => "ar" "_previous" => array:1 [ "url" => "https://www.corspedia.com/ar/%D8%A7%D9%84%D8%AF%D9%88%D8%B1%D8%A7%D8%AA/computer-vision-101:-let%27s-build-a-face-swapper-in-python" ] "_flash" => array:2 [ "old" => [] "new" => [] ] "PHPDEBUGBAR_STACK_DATA" => [] ]