This document describes an object detection and tracking algorithm using point feature matching. It detects objects in a scene by:
1. Detecting feature points in reference and scene images
2. Matching features to find putative correspondences between images
3. Estimating a geometric transform to determine the object's location and eliminate outliers
It then tracks detected objects across multiple frames. The algorithm is robust to scale and rotation changes but works best for objects with unique textures. Face detection and tracking is also demonstrated using skin tone as the tracked feature.
The document discusses Ibis, an open source Python data analysis framework that separates data analysis expression from execution. Ibis allows users to express data analysis tasks like feature engineering, grouping, joining and aggregation using an SQL-like language without specifying the execution engine. It can then execute the expressions by translating them to different backends like Pandas, Spark, BigQuery etc. based on the data source. The document provides an example expressing a complex pandas workflow involving grouping, rolling window aggregation and composite aggregation using Ibis expressions, separating the what from the how of computation.
The document summarizes Ibis, an open source Python framework for data analysis that provides a high-level language for expressing data transformations and analytics independently of backend execution engines like Pandas or Spark. It introduces Ibis by comparing different approaches to scaling data science workflows from Pandas on a single machine to distributed systems. It then demonstrates how to express the same data preparation and analysis logic in Ibis and have it execute on different backends like Pandas or PySpark without code changes. The document shows how Ibis compilers translate expressions to backend-specific code to enable seamless transition between backends.
The document provides an outline of a lecture on object-oriented JavaScript and inheritance. It covers key concepts like objects, properties, methods, object literals, constructor functions, and prototype inheritance. It discusses creating and accessing objects, adding and removing properties, passing objects by reference, comparing objects, and the prototype chain. Private and privileged methods and properties are explained. Different approaches to implementing inheritance like prototype chaining are also summarized.
This document provides an overview of best practices for writing responsible JavaScript code. It discusses topics like avoiding globals, using namespaces, modifying prototypes responsibly, factories for object creation, properly handling the this keyword, best practices for switch statements, equality comparisons, and the use of $ in libraries and applications. The document emphasizes writing clear, understandable code, avoiding ambiguity and potential bugs, and being considerate of other code on the page.
The document discusses the composite and iterator patterns. The composite pattern allows clients to treat individual objects and compositions of objects uniformly. It involves adding child management operations like add and remove to a base class. The iterator pattern provides a way to access elements of an aggregate object sequentially without exposing its underlying representation. It defines a common interface for iterating over elements. The document then provides an example of applying these patterns to iterate over animals on a farm.
JSUG - Effective Java Puzzlers by Christoph PicklChristoph Pickl
The document summarizes an agenda for a meeting on Effective Java Puzzlers. The agenda includes:
1. Discussing the books Effective Java and Java Puzzlers.
2. Having attendees solve puzzles individually.
3. Going through puzzles together and providing solutions and background information.
4. Sharing good advice on being more effective.
5. Providing a summary of the meeting.
Dependency Inversion and Dependency Injection in PHPmtoppa
The document discusses dependency injection and inversion in PHP. It defines dependency injection as a design pattern for implementing dependency inversion. Dependency inversion is a principle where high-level modules should not depend on low-level modules, but both should depend on abstractions. The document provides an example of applying dependency injection and inversion to a button and lamp class. It discusses benefits like loose coupling and testability. It also discusses different patterns for implementing dependency injection like constructor injection and using an injection container.
The document discusses Ibis, an open source Python data analysis framework that separates data analysis expression from execution. Ibis allows users to express data analysis tasks like feature engineering, grouping, joining and aggregation using an SQL-like language without specifying the execution engine. It can then execute the expressions by translating them to different backends like Pandas, Spark, BigQuery etc. based on the data source. The document provides an example expressing a complex pandas workflow involving grouping, rolling window aggregation and composite aggregation using Ibis expressions, separating the what from the how of computation.
The document summarizes Ibis, an open source Python framework for data analysis that provides a high-level language for expressing data transformations and analytics independently of backend execution engines like Pandas or Spark. It introduces Ibis by comparing different approaches to scaling data science workflows from Pandas on a single machine to distributed systems. It then demonstrates how to express the same data preparation and analysis logic in Ibis and have it execute on different backends like Pandas or PySpark without code changes. The document shows how Ibis compilers translate expressions to backend-specific code to enable seamless transition between backends.
The document provides an outline of a lecture on object-oriented JavaScript and inheritance. It covers key concepts like objects, properties, methods, object literals, constructor functions, and prototype inheritance. It discusses creating and accessing objects, adding and removing properties, passing objects by reference, comparing objects, and the prototype chain. Private and privileged methods and properties are explained. Different approaches to implementing inheritance like prototype chaining are also summarized.
This document provides an overview of best practices for writing responsible JavaScript code. It discusses topics like avoiding globals, using namespaces, modifying prototypes responsibly, factories for object creation, properly handling the this keyword, best practices for switch statements, equality comparisons, and the use of $ in libraries and applications. The document emphasizes writing clear, understandable code, avoiding ambiguity and potential bugs, and being considerate of other code on the page.
The document discusses the composite and iterator patterns. The composite pattern allows clients to treat individual objects and compositions of objects uniformly. It involves adding child management operations like add and remove to a base class. The iterator pattern provides a way to access elements of an aggregate object sequentially without exposing its underlying representation. It defines a common interface for iterating over elements. The document then provides an example of applying these patterns to iterate over animals on a farm.
JSUG - Effective Java Puzzlers by Christoph PicklChristoph Pickl
The document summarizes an agenda for a meeting on Effective Java Puzzlers. The agenda includes:
1. Discussing the books Effective Java and Java Puzzlers.
2. Having attendees solve puzzles individually.
3. Going through puzzles together and providing solutions and background information.
4. Sharing good advice on being more effective.
5. Providing a summary of the meeting.
Dependency Inversion and Dependency Injection in PHPmtoppa
The document discusses dependency injection and inversion in PHP. It defines dependency injection as a design pattern for implementing dependency inversion. Dependency inversion is a principle where high-level modules should not depend on low-level modules, but both should depend on abstractions. The document provides an example of applying dependency injection and inversion to a button and lamp class. It discusses benefits like loose coupling and testability. It also discusses different patterns for implementing dependency injection like constructor injection and using an injection container.
Oxygine 2 d objects,events,debug and resourcescorehard_by
Доклад будет посвящен созданию/удалению и взаимодействию игровых объектах, о стандартных и кастомизированных смартпоинтерах. Какими вещами пользоваться чтобы получить debug информацию о том что происходит в игре. Будут приведены примеры шаблонов игрового проектирования. Несколько слов о интересных редакторах игровых ресурсов: MapEditor.com, Astralax.ru
This tutor puts a trip to the kingdom of object recognition with computer vision knowledge and an image classifier.
Object detection has been witnessing a rapid revolutionary change in some fields of computer vision. Its involvement in the combination of object classification
as well as object recognition makes it one of the most challenging topics in the domain of machine learning & vision.
Transfer learning, active learning using tensorflow object detection api설기 김
Explanation of tensorflow object detection, explanation of transfer learning, active learning, test result using actual data.
An introduction to the tool that makes it easy to use object detection api is also included.
The full version with animations can be found in this link.
https://docs.google.com/presentation/d/11EVzICHMw3UbNRRaODxQVT0qhuHrzpMhBCnVZy4FrhI/edit?usp=sharing
The document provides an agenda and overview for an introduction to computer vision in .NET. The agenda includes discussing what digital images and computer vision are, demonstrating Hello OpenCV in .NET, covering convolution and edge detection, facial detection, facial detection with the Vonage Video API, and feature tracking and image projection. The document shares code examples and resources for working with computer vision libraries like OpenCV and Emgu CV in .NET.
DESIGNING A PERSISTENCE FRAMEWORK WITH PATTERNS.pptAntoJoseph36
The document discusses designing a persistence framework using patterns. It describes persistent objects that survive process termination and storage mechanisms like object and relational databases. A persistence framework provides functions to store/retrieve objects and commit/rollback transactions. Key concepts covered include mapping objects to tables, object identity, materialization/dematerialization, caches, and transactions. Common patterns used in persistence frameworks are also described, such as representing objects as tables, the database mapper pattern, template method for caching, and the state pattern for transaction management.
This document proposes a standard called AR-LEM for Augmented Reality Learning Experience Models. It describes models for activities, workplaces and augmentations that can be used to create augmented reality learning experiences. The activity model defines action steps, triggers, instructions and flow. The workplace model defines tangible people, places and things that can be activated or deactivated. It also describes how to attach augmentations like overlays, videos and 3D models to tangibles. The document provides examples of using these models to assemble an augmented reality activity for assembling a cabinet, including activating overlays on detected markers and transitioning between action steps.
This document provides an overview of the Scale-Invariant Feature Transform (SIFT) algorithm. It discusses the key steps in SIFT including constructing a scale space, approximating the Laplacian of Gaussian (LoG), finding keypoints, assigning orientations to keypoints, and generating SIFT descriptors. The document also provides examples of Matlab code implementations for several steps in the SIFT algorithm. Finally, it introduces the VLFeat open source library for computer vision that includes implementations of SIFT and other algorithms.
Sceneform SDK на практиці - UA Mobile 2019UA Mobile
Тема нативних движків, що спрощують роботу з 3D графікою для Android, є головним болем багатьох розробників. У той час як для iOS існує SceneKit, розробники під Android були змушені або йти в крос-платформені рішення (Unity3d, LibGDX і т.п.) або використовувати самописні/опенсорсні рішення з обмеженим функціоналом. Поява Sceneform SDK вирішує не тільки цю проблему але й інкапсулює в собі роботу з ArCore SDK, відкриваючи для розробників можливість нативної реалізації AR рішень, не вдаючись до стороннього SDK.
В рамках доповіді будуть розглянуті практичні можливості та обмеження Sceneform SDK стосовно проектів з доповненою реальністю (AR). Так само будуть розглянуті такі теми як SLAM, ArCore SDK, розпізнавання та трекінг маркерів на основі зображень, Cloud Anchors та існуючі альтернативи на ринку.
Sceneform SDK на практиці - UA Mobile 2019Eugene Kurko
Тема нативних движків, що спрощують роботу з 3D графікою для Android, є головним болем багатьох розробників. У той час як для iOS існує SceneKit, розробники під Android були змушені або йти в крос-платформені рішення (Unity3d, LibGDX і т.п.) або використовувати самописні/опенсорсні рішення з обмеженим функціоналом. Поява Sceneform SDK вирішує не тільки цю проблему але й інкапсулює в собі роботу з ArCore SDK, відкриваючи для розробників можливість нативної реалізації AR рішень, не вдаючись до стороннього SDK.
В рамках доповіді будуть розглянуті практичні можливості та обмеження Sceneform SDK стосовно проектів з доповненою реальністю (AR). Так само будуть розглянуті такі теми як SLAM, ArCore SDK, розпізнавання та трекінг маркерів на основі зображень, Cloud Anchors та існуючі альтернативи на ринку.
The document discusses building 2D and 3D games with Ruby using low-level APIs. It covers topics like building 2D games with Ruby SDL, building 3D games with Ruby OpenGL, and whether Ruby is a legitimate player in the gaming space. Examples provided include sample code for sprites, events, and extensions to interface with C libraries for graphics and game development.
The document discusses building 2D and 3D games with Ruby using low-level APIs. It covers topics like building 2D games with Ruby SDL, building 3D games with Ruby OpenGL, and whether Ruby is a legitimate player in the gaming space. Examples provided include sample code for sprites, events, and extensions to interface with C libraries for graphics and game development.
asmt7/~$sc_210_-_assignment_7_fall_15.doc
asmt7/cosc_210_-_assignment_7_fall_15.doc
COSC 210 - Object Oriented Programming
Assignment 7
The objectives of this assignment are to:
1) Gain further understanding and experience with inheritance.
2) Gain understanding and experience with polymorphism.
3) Gain further understanding and experience with interfaces.
4) Gain understanding and experience with low level graphics.
5) Modify an existing program to meet new requirements applying concepts of objectives 1 through 4.
6) Gain experience with medium-size Java program.
7) Continue to practice good programming techniques.
AFTER YOU HAVE COMPLETED, create a zip file named [your name]Assignment7.zip containing your entire project. Upload the .zip file to Moodle. Printout all source files you created or modified. Include a screen shot of the editor with boxes, ellipses, lines and images shown in the editor. Turn-in all printouts.
COSC 210 – Fundamentals of Computer Science
Assignment 7 Problem Statement
Updated
On the tomcat drive in folder cosc210 you will find file named PainterStartup.zip. This file contains the source code for the start of a Painter program. In its current state, Painter can create boxes and text objects at given locations. Both boxes and text objects can be repositioned and resized using a mouse. The task is to add to the program the implementation for an ellipse, line, image, and group objects.
Instructions:
1) Add an ellipse object. An ellipse is very similar in implementation as the box, except it renders an oval instead of a rectangle. The ellipse can be repositioned by dragging the object to a new location. The ellipse can be resized by first clicking over the ellipse to display grab handles and then dragging a grab handle to a new position. The grab handles are to be rendered at the same positions as the box. Likewise, clicking anywhere in the smallest rectangle that encloses the ellipse performs selection.
2) Add a Line object. A Line is to be created by selecting a Line tool and then click and drag over the canvas. The line is rendered from the point of the initial click to the mouse pointer. On releasing the mouse the construction of the line object is completed. Have the Line object inherit from PtrDrawAbstractAreaObject. Thus it will have only two grab handles.
A Line is selected by clicking anywhere over the line. Right now if you click anywhere in the rectangular region hold the line, then the line is selected. To accomplish this task, override the isOver method in PtrDrawAbstractAreaObject.
Given below is a partial solution to determine if a mouse click position (the x and y parameters to the isOver method) is over a line:
double ratio = (double) getWidth() / (double) getHeight();
if (Math.abs((x - getX()) * ratio) - (y - getY()) <= 1) {
return true;
}
You need to modify this code when the y to x ratio is less than -1 or greater than 1. (Hint: Inverse the r ...
This document discusses a method for identifying thematic objects in videos. The method first extracts local feature points from each video frame using Harris corner detection. Descriptors are extracted around each corner point. The descriptors of a reference image are compared to the descriptors of video frames to find similarity and identify frames containing the same object. Identifying frequently appearing objects in this way helps with tasks like object search, tagging, and video summarization. The approach is able to identify objects even when there is partial occlusion or viewpoint variation between frames.
This document provides an overview of using objects and scripting motion in Adobe Flash. It discusses creating ActionScript classes, placing objects on the stage programmatically and from the library, and drawing objects like circles with code. It then covers moving objects by updating their x and y coordinates, using event listeners like ENTER_FRAME to trigger movement, bouncing objects off edges by changing their direction, and detecting edge collisions more precisely by considering the object's size. The homework is to read a chapter on game elements and create a Flash file with an object moving across the stage using ActionScript.
This document summarizes a lecture on using objects and scripting motion in Adobe Flash. It discusses creating ActionScript classes, placing objects on the stage programmatically and from the library, drawing objects with code, exporting objects from the library for use in ActionScript, moving objects with code, using event listeners like ENTER_FRAME to trigger movement, detecting edges to make objects bounce, and making the bounce more realistic by detecting the edge of the object itself. It assigns homework of reading a chapter on game elements in ActionScript and creating a Flash file with an object that moves across the screen using scripted motion.
This document summarizes a lecture on using objects and scripting motion in Adobe Flash. It discusses creating ActionScript classes, placing objects on the stage programmatically and from the library, drawing objects with code, exporting objects from the library for use in ActionScript, moving objects with code, using event listeners like ENTER_FRAME to trigger movement, detecting edges to make objects bounce, and making the bounce more realistic by detecting the edge of the object itself. It assigns homework of reading a chapter on game elements in ActionScript and creating a Flash file with an object that moves across the screen using scripted motion.
Building Production Ready Search Pipelines with Spark and MilvusZilliz
Spark is the widely used ETL tool for processing, indexing and ingesting data to serving stack for search. Milvus is the production-ready open-source vector database. In this talk we will show how to use Spark to process unstructured data to extract vector representations, and push the vectors to Milvus vector database for search serving.
Oxygine 2 d objects,events,debug and resourcescorehard_by
Доклад будет посвящен созданию/удалению и взаимодействию игровых объектах, о стандартных и кастомизированных смартпоинтерах. Какими вещами пользоваться чтобы получить debug информацию о том что происходит в игре. Будут приведены примеры шаблонов игрового проектирования. Несколько слов о интересных редакторах игровых ресурсов: MapEditor.com, Astralax.ru
This tutor puts a trip to the kingdom of object recognition with computer vision knowledge and an image classifier.
Object detection has been witnessing a rapid revolutionary change in some fields of computer vision. Its involvement in the combination of object classification
as well as object recognition makes it one of the most challenging topics in the domain of machine learning & vision.
Transfer learning, active learning using tensorflow object detection api설기 김
Explanation of tensorflow object detection, explanation of transfer learning, active learning, test result using actual data.
An introduction to the tool that makes it easy to use object detection api is also included.
The full version with animations can be found in this link.
https://docs.google.com/presentation/d/11EVzICHMw3UbNRRaODxQVT0qhuHrzpMhBCnVZy4FrhI/edit?usp=sharing
The document provides an agenda and overview for an introduction to computer vision in .NET. The agenda includes discussing what digital images and computer vision are, demonstrating Hello OpenCV in .NET, covering convolution and edge detection, facial detection, facial detection with the Vonage Video API, and feature tracking and image projection. The document shares code examples and resources for working with computer vision libraries like OpenCV and Emgu CV in .NET.
DESIGNING A PERSISTENCE FRAMEWORK WITH PATTERNS.pptAntoJoseph36
The document discusses designing a persistence framework using patterns. It describes persistent objects that survive process termination and storage mechanisms like object and relational databases. A persistence framework provides functions to store/retrieve objects and commit/rollback transactions. Key concepts covered include mapping objects to tables, object identity, materialization/dematerialization, caches, and transactions. Common patterns used in persistence frameworks are also described, such as representing objects as tables, the database mapper pattern, template method for caching, and the state pattern for transaction management.
This document proposes a standard called AR-LEM for Augmented Reality Learning Experience Models. It describes models for activities, workplaces and augmentations that can be used to create augmented reality learning experiences. The activity model defines action steps, triggers, instructions and flow. The workplace model defines tangible people, places and things that can be activated or deactivated. It also describes how to attach augmentations like overlays, videos and 3D models to tangibles. The document provides examples of using these models to assemble an augmented reality activity for assembling a cabinet, including activating overlays on detected markers and transitioning between action steps.
This document provides an overview of the Scale-Invariant Feature Transform (SIFT) algorithm. It discusses the key steps in SIFT including constructing a scale space, approximating the Laplacian of Gaussian (LoG), finding keypoints, assigning orientations to keypoints, and generating SIFT descriptors. The document also provides examples of Matlab code implementations for several steps in the SIFT algorithm. Finally, it introduces the VLFeat open source library for computer vision that includes implementations of SIFT and other algorithms.
Sceneform SDK на практиці - UA Mobile 2019UA Mobile
Тема нативних движків, що спрощують роботу з 3D графікою для Android, є головним болем багатьох розробників. У той час як для iOS існує SceneKit, розробники під Android були змушені або йти в крос-платформені рішення (Unity3d, LibGDX і т.п.) або використовувати самописні/опенсорсні рішення з обмеженим функціоналом. Поява Sceneform SDK вирішує не тільки цю проблему але й інкапсулює в собі роботу з ArCore SDK, відкриваючи для розробників можливість нативної реалізації AR рішень, не вдаючись до стороннього SDK.
В рамках доповіді будуть розглянуті практичні можливості та обмеження Sceneform SDK стосовно проектів з доповненою реальністю (AR). Так само будуть розглянуті такі теми як SLAM, ArCore SDK, розпізнавання та трекінг маркерів на основі зображень, Cloud Anchors та існуючі альтернативи на ринку.
Sceneform SDK на практиці - UA Mobile 2019Eugene Kurko
Тема нативних движків, що спрощують роботу з 3D графікою для Android, є головним болем багатьох розробників. У той час як для iOS існує SceneKit, розробники під Android були змушені або йти в крос-платформені рішення (Unity3d, LibGDX і т.п.) або використовувати самописні/опенсорсні рішення з обмеженим функціоналом. Поява Sceneform SDK вирішує не тільки цю проблему але й інкапсулює в собі роботу з ArCore SDK, відкриваючи для розробників можливість нативної реалізації AR рішень, не вдаючись до стороннього SDK.
В рамках доповіді будуть розглянуті практичні можливості та обмеження Sceneform SDK стосовно проектів з доповненою реальністю (AR). Так само будуть розглянуті такі теми як SLAM, ArCore SDK, розпізнавання та трекінг маркерів на основі зображень, Cloud Anchors та існуючі альтернативи на ринку.
The document discusses building 2D and 3D games with Ruby using low-level APIs. It covers topics like building 2D games with Ruby SDL, building 3D games with Ruby OpenGL, and whether Ruby is a legitimate player in the gaming space. Examples provided include sample code for sprites, events, and extensions to interface with C libraries for graphics and game development.
The document discusses building 2D and 3D games with Ruby using low-level APIs. It covers topics like building 2D games with Ruby SDL, building 3D games with Ruby OpenGL, and whether Ruby is a legitimate player in the gaming space. Examples provided include sample code for sprites, events, and extensions to interface with C libraries for graphics and game development.
asmt7/~$sc_210_-_assignment_7_fall_15.doc
asmt7/cosc_210_-_assignment_7_fall_15.doc
COSC 210 - Object Oriented Programming
Assignment 7
The objectives of this assignment are to:
1) Gain further understanding and experience with inheritance.
2) Gain understanding and experience with polymorphism.
3) Gain further understanding and experience with interfaces.
4) Gain understanding and experience with low level graphics.
5) Modify an existing program to meet new requirements applying concepts of objectives 1 through 4.
6) Gain experience with medium-size Java program.
7) Continue to practice good programming techniques.
AFTER YOU HAVE COMPLETED, create a zip file named [your name]Assignment7.zip containing your entire project. Upload the .zip file to Moodle. Printout all source files you created or modified. Include a screen shot of the editor with boxes, ellipses, lines and images shown in the editor. Turn-in all printouts.
COSC 210 – Fundamentals of Computer Science
Assignment 7 Problem Statement
Updated
On the tomcat drive in folder cosc210 you will find file named PainterStartup.zip. This file contains the source code for the start of a Painter program. In its current state, Painter can create boxes and text objects at given locations. Both boxes and text objects can be repositioned and resized using a mouse. The task is to add to the program the implementation for an ellipse, line, image, and group objects.
Instructions:
1) Add an ellipse object. An ellipse is very similar in implementation as the box, except it renders an oval instead of a rectangle. The ellipse can be repositioned by dragging the object to a new location. The ellipse can be resized by first clicking over the ellipse to display grab handles and then dragging a grab handle to a new position. The grab handles are to be rendered at the same positions as the box. Likewise, clicking anywhere in the smallest rectangle that encloses the ellipse performs selection.
2) Add a Line object. A Line is to be created by selecting a Line tool and then click and drag over the canvas. The line is rendered from the point of the initial click to the mouse pointer. On releasing the mouse the construction of the line object is completed. Have the Line object inherit from PtrDrawAbstractAreaObject. Thus it will have only two grab handles.
A Line is selected by clicking anywhere over the line. Right now if you click anywhere in the rectangular region hold the line, then the line is selected. To accomplish this task, override the isOver method in PtrDrawAbstractAreaObject.
Given below is a partial solution to determine if a mouse click position (the x and y parameters to the isOver method) is over a line:
double ratio = (double) getWidth() / (double) getHeight();
if (Math.abs((x - getX()) * ratio) - (y - getY()) <= 1) {
return true;
}
You need to modify this code when the y to x ratio is less than -1 or greater than 1. (Hint: Inverse the r ...
This document discusses a method for identifying thematic objects in videos. The method first extracts local feature points from each video frame using Harris corner detection. Descriptors are extracted around each corner point. The descriptors of a reference image are compared to the descriptors of video frames to find similarity and identify frames containing the same object. Identifying frequently appearing objects in this way helps with tasks like object search, tagging, and video summarization. The approach is able to identify objects even when there is partial occlusion or viewpoint variation between frames.
This document provides an overview of using objects and scripting motion in Adobe Flash. It discusses creating ActionScript classes, placing objects on the stage programmatically and from the library, and drawing objects like circles with code. It then covers moving objects by updating their x and y coordinates, using event listeners like ENTER_FRAME to trigger movement, bouncing objects off edges by changing their direction, and detecting edge collisions more precisely by considering the object's size. The homework is to read a chapter on game elements and create a Flash file with an object moving across the stage using ActionScript.
This document summarizes a lecture on using objects and scripting motion in Adobe Flash. It discusses creating ActionScript classes, placing objects on the stage programmatically and from the library, drawing objects with code, exporting objects from the library for use in ActionScript, moving objects with code, using event listeners like ENTER_FRAME to trigger movement, detecting edges to make objects bounce, and making the bounce more realistic by detecting the edge of the object itself. It assigns homework of reading a chapter on game elements in ActionScript and creating a Flash file with an object that moves across the screen using scripted motion.
This document summarizes a lecture on using objects and scripting motion in Adobe Flash. It discusses creating ActionScript classes, placing objects on the stage programmatically and from the library, drawing objects with code, exporting objects from the library for use in ActionScript, moving objects with code, using event listeners like ENTER_FRAME to trigger movement, detecting edges to make objects bounce, and making the bounce more realistic by detecting the edge of the object itself. It assigns homework of reading a chapter on game elements in ActionScript and creating a Flash file with an object that moves across the screen using scripted motion.
Building Production Ready Search Pipelines with Spark and MilvusZilliz
Spark is the widely used ETL tool for processing, indexing and ingesting data to serving stack for search. Milvus is the production-ready open-source vector database. In this talk we will show how to use Spark to process unstructured data to extract vector representations, and push the vectors to Milvus vector database for search serving.
Climate Impact of Software Testing at Nordic Testing DaysKari Kakkonen
My slides at Nordic Testing Days 6.6.2024
Climate impact / sustainability of software testing discussed on the talk. ICT and testing must carry their part of global responsibility to help with the climat warming. We can minimize the carbon footprint but we can also have a carbon handprint, a positive impact on the climate. Quality characteristics can be added with sustainability, and then measured continuously. Test environments can be used less, and in smaller scale and on demand. Test techniques can be used in optimizing or minimizing number of tests. Test automation can be used to speed up testing.
Unlocking Productivity: Leveraging the Potential of Copilot in Microsoft 365, a presentation by Christoforos Vlachos, Senior Solutions Manager – Modern Workplace, Uni Systems
Infrastructure Challenges in Scaling RAG with Custom AI modelsZilliz
Building Retrieval-Augmented Generation (RAG) systems with open-source and custom AI models is a complex task. This talk explores the challenges in productionizing RAG systems, including retrieval performance, response synthesis, and evaluation. We’ll discuss how to leverage open-source models like text embeddings, language models, and custom fine-tuned models to enhance RAG performance. Additionally, we’ll cover how BentoML can help orchestrate and scale these AI components efficiently, ensuring seamless deployment and management of RAG systems in the cloud.
How to Get CNIC Information System with Paksim Ga.pptxdanishmna97
Pakdata Cf is a groundbreaking system designed to streamline and facilitate access to CNIC information. This innovative platform leverages advanced technology to provide users with efficient and secure access to their CNIC details.
Driving Business Innovation: Latest Generative AI Advancements & Success StorySafe Software
Are you ready to revolutionize how you handle data? Join us for a webinar where we’ll bring you up to speed with the latest advancements in Generative AI technology and discover how leveraging FME with tools from giants like Google Gemini, Amazon, and Microsoft OpenAI can supercharge your workflow efficiency.
During the hour, we’ll take you through:
Guest Speaker Segment with Hannah Barrington: Dive into the world of dynamic real estate marketing with Hannah, the Marketing Manager at Workspace Group. Hear firsthand how their team generates engaging descriptions for thousands of office units by integrating diverse data sources—from PDF floorplans to web pages—using FME transformers, like OpenAIVisionConnector and AnthropicVisionConnector. This use case will show you how GenAI can streamline content creation for marketing across the board.
Ollama Use Case: Learn how Scenario Specialist Dmitri Bagh has utilized Ollama within FME to input data, create custom models, and enhance security protocols. This segment will include demos to illustrate the full capabilities of FME in AI-driven processes.
Custom AI Models: Discover how to leverage FME to build personalized AI models using your data. Whether it’s populating a model with local data for added security or integrating public AI tools, find out how FME facilitates a versatile and secure approach to AI.
We’ll wrap up with a live Q&A session where you can engage with our experts on your specific use cases, and learn more about optimizing your data workflows with AI.
This webinar is ideal for professionals seeking to harness the power of AI within their data management systems while ensuring high levels of customization and security. Whether you're a novice or an expert, gain actionable insights and strategies to elevate your data processes. Join us to see how FME and AI can revolutionize how you work with data!
For the full video of this presentation, please visit: https://www.edge-ai-vision.com/2024/06/building-and-scaling-ai-applications-with-the-nx-ai-manager-a-presentation-from-network-optix/
Robin van Emden, Senior Director of Data Science at Network Optix, presents the “Building and Scaling AI Applications with the Nx AI Manager,” tutorial at the May 2024 Embedded Vision Summit.
In this presentation, van Emden covers the basics of scaling edge AI solutions using the Nx tool kit. He emphasizes the process of developing AI models and deploying them globally. He also showcases the conversion of AI models and the creation of effective edge AI pipelines, with a focus on pre-processing, model conversion, selecting the appropriate inference engine for the target hardware and post-processing.
van Emden shows how Nx can simplify the developer’s life and facilitate a rapid transition from concept to production-ready applications.He provides valuable insights into developing scalable and efficient edge AI solutions, with a strong focus on practical implementation.
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdfMalak Abu Hammad
Discover how MongoDB Atlas and vector search technology can revolutionize your application's search capabilities. This comprehensive presentation covers:
* What is Vector Search?
* Importance and benefits of vector search
* Practical use cases across various industries
* Step-by-step implementation guide
* Live demos with code snippets
* Enhancing LLM capabilities with vector search
* Best practices and optimization strategies
Perfect for developers, AI enthusiasts, and tech leaders. Learn how to leverage MongoDB Atlas to deliver highly relevant, context-aware search results, transforming your data retrieval process. Stay ahead in tech innovation and maximize the potential of your applications.
#MongoDB #VectorSearch #AI #SemanticSearch #TechInnovation #DataScience #LLM #MachineLearning #SearchTechnology
Communications Mining Series - Zero to Hero - Session 1DianaGray10
This session provides introduction to UiPath Communication Mining, importance and platform overview. You will acquire a good understand of the phases in Communication Mining as we go over the platform with you. Topics covered:
• Communication Mining Overview
• Why is it important?
• How can it help today’s business and the benefits
• Phases in Communication Mining
• Demo on Platform overview
• Q/A
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...Neo4j
Leonard Jayamohan, Partner & Generative AI Lead, Deloitte
This keynote will reveal how Deloitte leverages Neo4j’s graph power for groundbreaking digital twin solutions, achieving a staggering 100x performance boost. Discover the essential role knowledge graphs play in successful generative AI implementations. Plus, get an exclusive look at an innovative Neo4j + Generative AI solution Deloitte is developing in-house.
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAUpanagenda
Webinar Recording: https://www.panagenda.com/webinars/hcl-notes-und-domino-lizenzkostenreduzierung-in-der-welt-von-dlau/
DLAU und die Lizenzen nach dem CCB- und CCX-Modell sind für viele in der HCL-Community seit letztem Jahr ein heißes Thema. Als Notes- oder Domino-Kunde haben Sie vielleicht mit unerwartet hohen Benutzerzahlen und Lizenzgebühren zu kämpfen. Sie fragen sich vielleicht, wie diese neue Art der Lizenzierung funktioniert und welchen Nutzen sie Ihnen bringt. Vor allem wollen Sie sicherlich Ihr Budget einhalten und Kosten sparen, wo immer möglich. Das verstehen wir und wir möchten Ihnen dabei helfen!
Wir erklären Ihnen, wie Sie häufige Konfigurationsprobleme lösen können, die dazu führen können, dass mehr Benutzer gezählt werden als nötig, und wie Sie überflüssige oder ungenutzte Konten identifizieren und entfernen können, um Geld zu sparen. Es gibt auch einige Ansätze, die zu unnötigen Ausgaben führen können, z. B. wenn ein Personendokument anstelle eines Mail-Ins für geteilte Mailboxen verwendet wird. Wir zeigen Ihnen solche Fälle und deren Lösungen. Und natürlich erklären wir Ihnen das neue Lizenzmodell.
Nehmen Sie an diesem Webinar teil, bei dem HCL-Ambassador Marc Thomas und Gastredner Franz Walder Ihnen diese neue Welt näherbringen. Es vermittelt Ihnen die Tools und das Know-how, um den Überblick zu bewahren. Sie werden in der Lage sein, Ihre Kosten durch eine optimierte Domino-Konfiguration zu reduzieren und auch in Zukunft gering zu halten.
Diese Themen werden behandelt
- Reduzierung der Lizenzkosten durch Auffinden und Beheben von Fehlkonfigurationen und überflüssigen Konten
- Wie funktionieren CCB- und CCX-Lizenzen wirklich?
- Verstehen des DLAU-Tools und wie man es am besten nutzt
- Tipps für häufige Problembereiche, wie z. B. Team-Postfächer, Funktions-/Testbenutzer usw.
- Praxisbeispiele und Best Practices zum sofortigen Umsetzen
Pushing the limits of ePRTC: 100ns holdover for 100 daysAdtran
At WSTS 2024, Alon Stern explored the topic of parametric holdover and explained how recent research findings can be implemented in real-world PNT networks to achieve 100 nanoseconds of accuracy for up to 100 days.
Threats to mobile devices are more prevalent and increasing in scope and complexity. Users of mobile devices desire to take full advantage of the features
available on those devices, but many of the features provide convenience and capability but sacrifice security. This best practices guide outlines steps the users can take to better protect personal devices and information.
“An Outlook of the Ongoing and Future Relationship between Blockchain Technologies and Process-aware Information Systems.” Invited talk at the joint workshop on Blockchain for Information Systems (BC4IS) and Blockchain for Trusted Data Sharing (B4TDS), co-located with with the 36th International Conference on Advanced Information Systems Engineering (CAiSE), 3 June 2024, Limassol, Cyprus.
Dr. Sean Tan, Head of Data Science, Changi Airport Group
Discover how Changi Airport Group (CAG) leverages graph technologies and generative AI to revolutionize their search capabilities. This session delves into the unique search needs of CAG’s diverse passengers and customers, showcasing how graph data structures enhance the accuracy and relevance of AI-generated search results, mitigating the risk of “hallucinations” and improving the overall customer journey.
20240605 QFM017 Machine Intelligence Reading List May 2024
Lath
1. Object Detection and Tracking
Object Detection In A Cluttered Scene Using Point Feature Matching
This example shows how to detect a particular object in a cluttered scene, given a reference image
of the object.
Overview
Step 1: Read Images
Step 2: Detect Feature Points
Step 3: Extract Feature Descriptors
Step 4: Find Putative Point Matches
Step 5: Locate the Object in the Scene Using Putative Matches
Step 7: Detect Another Object
Overview
This example presents an algorithm for detecting a specific object based on finding point
correspondences between the reference and the target image. It can detect objects despite a
scale change or in-plane rotation. It is also robust to small amount of out-of-plane rotation and
occlusion.
This method of object detection works best for objects that exhibit non-repeating texture patterns,
which give rise to unique feature matches. This technique is not likely to work well for uniformly-
colored objects, or for objects containing repeating patterns. Note that this algorithm is designed for
detecting a specific object, for example, the elephant in the reference image, rather than any
elephant. For detecting objects of a particular category, such as people or faces, see
vision.PeopleDetector and vision.CascadeObjectDetector.
Step 1: Read Images
Read the reference image containing the object of interest.
boxImage = imread('stapleRemover.jpg');
figure; imshow(boxImage);
title('Image of a Box');
Object Detection and Tracking - MATLAB & Simuli... http://www.mathworks.in/help/vision/gs/object-dete...
1 of 34 04/24/2014 07:10 PM
2. Read the target image containing a cluttered scene.
sceneImage = imread('clutteredDesk.jpg');
figure; imshow(sceneImage);
title('Image of a Cluttered Scene');
Step 2: Detect Feature Points
Detect feature points in both images.
Object Detection and Tracking - MATLAB & Simuli... http://www.mathworks.in/help/vision/gs/object-dete...
2 of 34 04/24/2014 07:10 PM
3. boxPoints = detectSURFFeatures(boxImage);
scenePoints = detectSURFFeatures(sceneImage);
Visualize the strongest feature points found in the reference image.
figure; imshow(boxImage);
title('100 Strongest Feature Points from Box Image');
hold on;
plot(boxPoints.selectStrongest(100));
Visualize the strongest feature points found in the target image.
figure; imshow(sceneImage);
title('300 Strongest Feature Points from Scene Image');
hold on;
plot(scenePoints.selectStrongest(300));
Object Detection and Tracking - MATLAB & Simuli... http://www.mathworks.in/help/vision/gs/object-dete...
3 of 34 04/24/2014 07:10 PM
4. Step 3: Extract Feature Descriptors
Extract feature descriptors at the interest points in both images.
[boxFeatures, boxPoints] = extractFeatures(boxImage,
boxPoints);
[sceneFeatures, scenePoints] = extractFeatures(sceneImage,
scenePoints);
Step 4: Find Putative Point Matches
Match the features using their descriptors.
boxPairs = matchFeatures(boxFeatures, sceneFeatures);
Display putatively matched features.
matchedBoxPoints = boxPoints(boxPairs(:, 1), :);
matchedScenePoints = scenePoints(boxPairs(:, 2), :);
figure;
showMatchedFeatures(boxImage, sceneImage, matchedBoxPoints,
...
matchedScenePoints, 'montage');
title('Putatively Matched Points (Including Outliers)');
Object Detection and Tracking - MATLAB & Simuli... http://www.mathworks.in/help/vision/gs/object-dete...
4 of 34 04/24/2014 07:10 PM
5. Step 5: Locate the Object in the Scene Using Putative Matches
estimateGeometricTransform calculates the transformation relating the matched points, while
eliminating outliers. This transformation allows us to localize the object in the scene.
[tform, inlierBoxPoints, inlierScenePoints] = ...
estimateGeometricTransform(matchedBoxPoints,
matchedScenePoints, 'affine');
Display the matching point pairs with the outliers removed
figure;
showMatchedFeatures(boxImage, sceneImage, inlierBoxPoints, ...
inlierScenePoints, 'montage');
title('Matched Points (Inliers Only)');
Object Detection and Tracking - MATLAB & Simuli... http://www.mathworks.in/help/vision/gs/object-dete...
5 of 34 04/24/2014 07:10 PM
6. Get the bounding polygon of the reference image.
boxPolygon = [1, 1;... % top-left
size(boxImage, 2), 1;... % top-right
size(boxImage, 2), size(boxImage, 1);... % bottom-
right
1, size(boxImage, 1);... % bottom-left
1, 1]; % top-left again to close
the polygon
Transform the polygon into the coordinate system of the target image. The transformed polygon
indicates the location of the object in the scene.
newBoxPolygon = transformPointsForward(tform, boxPolygon);
Display the detected object.
figure; imshow(sceneImage);
hold on;
line(newBoxPolygon(:, 1), newBoxPolygon(:, 2), 'Color', 'y');
title('Detected Box');
Object Detection and Tracking - MATLAB & Simuli... http://www.mathworks.in/help/vision/gs/object-dete...
6 of 34 04/24/2014 07:10 PM
7. Step 7: Detect Another Object
Detect a second object by using the same steps as before.
Read an image containing the second object of interest.
elephantImage = imread('elephant.jpg');
figure; imshow(elephantImage);
title('Image of an Elephant');
Object Detection and Tracking - MATLAB & Simuli... http://www.mathworks.in/help/vision/gs/object-dete...
7 of 34 04/24/2014 07:10 PM
8. Detect and visualize feature points.
elephantPoints = detectSURFFeatures(elephantImage);
figure; imshow(elephantImage);
hold on;
plot(elephantPoints.selectStrongest(100));
title('100 Strongest Feature Points from Elephant Image');
Object Detection and Tracking - MATLAB & Simuli... http://www.mathworks.in/help/vision/gs/object-dete...
8 of 34 04/24/2014 07:10 PM
11. Display Both Objects
elephantPolygon = [1, 1;... %
top-left
size(elephantImage, 2), 1;... %
top-right
size(elephantImage, 2), size(elephantImage, 1);... %
bottom-right
1, size(elephantImage, 1);... %
bottom-left
1,1]; % top-left again to
close the polygon
newElephantPolygon = transformPointsForward(tform,
elephantPolygon);
figure;
imshow(sceneImage);
hold on;
line(newBoxPolygon(:, 1), newBoxPolygon(:, 2), 'Color', 'y');
line(newElephantPolygon(:, 1), newElephantPolygon(:, 2),
'Color', 'g');
title('Detected Elephant and Box');
Object Detection and Tracking - MATLAB & Simuli... http://www.mathworks.in/help/vision/gs/object-dete...
11 of 34 04/24/2014 07:10 PM
12. Face Detection and Tracking Using CAMShift
This example shows how to automatically detect and track a face.
Introduction
Step 1: Detect a Face To Track
Step 2: Identify Facial Features To Track
Step 3: Track the Face
Summary
Reference
Introduction
Object detection and tracking are important in many computer vision applications including activity
recognition, automotive safety, and surveillance. In this example, you will develop a simple face
tracking system by dividing the tracking problem into three separate problems:
Detect a face to track1.
Identify facial features to track2.
Track the face3.
Step 1: Detect a Face To Track
Before you begin tracking a face, you need to first detect it. Use the vision.CascadeObjectDetector
to detect the location of a face in a video frame. The cascade object detector uses the Viola-Jones
detection algorithm and a trained classification model for detection. By default, the detector is
configured to detect faces, but it can be configured for other object types.
% Create a cascade detector object.
faceDetector = vision.CascadeObjectDetector();
% Read a video frame and run the detector.
videoFileReader = vision.VideoFileReader('visionface.avi');
videoFrame = step(videoFileReader);
bbox = step(faceDetector, videoFrame);
% Draw the returned bounding box around the detected face.
videoOut =
insertObjectAnnotation(videoFrame,'rectangle',bbox,'Face');
figure, imshow(videoOut), title('Detected face');
Object Detection and Tracking - MATLAB & Simuli... http://www.mathworks.in/help/vision/gs/object-dete...
12 of 34 04/24/2014 07:10 PM
13. You can use the cascade object detector to track a face across successive video frames. However,
when the face tilts or the person turns their head, you may lose tracking. This limitation is due to
the type of trained classification model used for detection. To avoid this issue, and because
performing face detection for every video frame is computationally intensive, this example uses a
simple facial feature for tracking.
Step 2: Identify Facial Features To Track
Once the face is located in the video, the next step is to identify a feature that will help you track
the face. For example, you can use the shape, texture, or color. Choose a feature that is unique to
the object and remains invariant even when the object moves.
In this example, you use skin tone as the feature to track. The skin tone provides a good deal of
contrast between the face and the background and does not change as the face rotates or moves.
% Get the skin tone information by extracting the Hue from
the video frame
% converted to the HSV color space.
[hueChannel,~,~] = rgb2hsv(videoFrame);
% Display the Hue Channel data and draw the bounding box
around the face.
figure, imshow(hueChannel), title('Hue channel data');
rectangle('Position',bbox(1,:),'LineWidth',2,'EdgeColor',[1 1
0])
Object Detection and Tracking - MATLAB & Simuli... http://www.mathworks.in/help/vision/gs/object-dete...
13 of 34 04/24/2014 07:10 PM
14. Step 3: Track the Face
With the skin tone selected as the feature to track, you can now use the
vision.HistogramBasedTracker for tracking. The histogram based tracker uses the CAMShift
algorithm, which provides the capability to track an object using a histogram of pixel values. In this
example, the Hue channel pixels are extracted from the nose region of the detected face. These
pixels are used to initialize the histogram for the tracker. The example tracks the object over
successive video frames using this histogram.
% Detect the nose within the face region. The nose provides a
more accurate
% measure of the skin tone because it does not contain any
background
% pixels.
noseDetector = vision.CascadeObjectDetector('Nose');
faceImage = imcrop(videoFrame,bbox(1,:));
noseBBox = step(noseDetector,faceImage);
% The nose bounding box is defined relative to the cropped
face image.
% Adjust the nose bounding box so that it is relative to the
original video
% frame.
noseBBox(1,1:2) = noseBBox(1,1:2) + bbox(1,1:2);
Object Detection and Tracking - MATLAB & Simuli... http://www.mathworks.in/help/vision/gs/object-dete...
14 of 34 04/24/2014 07:10 PM
15. % Create a tracker object.
tracker = vision.HistogramBasedTracker;
% Initialize the tracker histogram using the Hue channel
pixels from the
% nose.
initializeObject(tracker, hueChannel, noseBBox(1,:));
% Create a video player object for displaying video frames.
videoInfo = info(videoFileReader);
videoPlayer = vision.VideoPlayer('Position',[300 300
videoInfo.VideoSize+30]);
% Track the face over successive video frames until the video
is finished.
while ~isDone(videoFileReader)
% Extract the next video frame
videoFrame = step(videoFileReader);
% RGB -> HSV
[hueChannel,~,~] = rgb2hsv(videoFrame);
% Track using the Hue channel data
bbox = step(tracker, hueChannel);
% Insert a bounding box around the object being tracked
videoOut =
insertObjectAnnotation(videoFrame,'rectangle',bbox,'Face');
% Display the annotated video frame using the video
player object
step(videoPlayer, videoOut);
end
% Release resources
release(videoFileReader);
Object Detection and Tracking - MATLAB & Simuli... http://www.mathworks.in/help/vision/gs/object-dete...
15 of 34 04/24/2014 07:10 PM
16. release(videoPlayer);
Summary
In this example, you created a simple face tracking system that automatically detects and tracks a
single face. Try changing the input video and see if you are able to track a face. If you notice poor
tracking results, check the Hue channel data to see if there is enough contrast between the face
region and the background.
Reference
[1] G.R. Bradski "Real Time Face and Object Tracking as a Component of a Perceptual User
Interface", Proceedings of the 4th IEEE Workshop on Applications of Computer Vision, 1998.
[2] Viola, Paul A. and Jones, Michael J. "Rapid Object Detection using a Boosted Cascade of
Simple Features", IEEE CVPR, 2001.
Motion-Based Multiple Object Tracking
This example shows how to perform automatic detection and motion-based tracking of moving
objects in a video from a stationary camera.
Detection of moving objects and motion-based tracking are important components of many
computer vision applications, including activity recognition, traffic monitoring, and automotive safety.
The problem of motion-based object tracking can be divided into two parts:
detecting moving objects in each frame1.
associating the detections corresponding to the same object over time2.
The detection of moving objects uses a background subtraction algorithm based on Gaussian
mixture models. Morphological operations are applied to the resulting foreground mask to eliminate
noise. Finally, blob analysis detects groups of connected pixels, which are likely to correspond to
Object Detection and Tracking - MATLAB & Simuli... http://www.mathworks.in/help/vision/gs/object-dete...
16 of 34 04/24/2014 07:10 PM
17. moving objects.
The association of detections to the same object is based solely on motion. The motion of each
track is estimated by a Kalman filter. The filter is used to predict the track's location in each frame,
and determine the likelihood of each detection being assigned to each track.
Track maintenance becomes an important aspect of this example. In any given frame, some
detections may be assigned to tracks, while other detections and tracks may remain
unassigned.The assigned tracks are updated using the corresponding detections. The unassigned
tracks are marked invisible. An unassigned detection begins a new track.
Each track keeps count of the number of consecutive frames, where it remained unassigned. If the
count exceeds a specified threshold, the example assumes that the object left the field of view and
it deletes the track.
This example is a function with the main body at the top and helper routines in the form of nested
functions below.
function multiObjectTracking()
% Create system objects used for reading video, detecting
moving objects,
% and displaying the results.
obj = setupSystemObjects();
tracks = initializeTracks(); % Create an empty array of
tracks.
nextId = 1; % ID of the next track
% Detect moving objects, and track them across video frames.
while ~isDone(obj.reader)
frame = readFrame();
[centroids, bboxes, mask] = detectObjects(frame);
predictNewLocationsOfTracks();
[assignments, unassignedTracks, unassignedDetections] =
...
detectionToTrackAssignment();
updateAssignedTracks();
updateUnassignedTracks();
deleteLostTracks();
createNewTracks();
Object Detection and Tracking - MATLAB & Simuli... http://www.mathworks.in/help/vision/gs/object-dete...
17 of 34 04/24/2014 07:10 PM
19. Predict New Locations of Existing Tracks
Assign Detections to Tracks
Update Assigned Tracks
Update Unassigned Tracks
Delete Lost Tracks
Create New Tracks
Display Tracking Results
Summary
Create System Objects
Create System objects used for reading the video frames, detecting foreground objects, and
displaying results.
function obj = setupSystemObjects()
% Initialize Video I/O
% Create objects for reading a video from a file,
drawing the tracked
% objects in each frame, and playing the video.
% Create a video file reader.
obj.reader = vision.VideoFileReader('atrium.avi');
% Create two video players, one to display the video,
% and one to display the foreground mask.
obj.videoPlayer = vision.VideoPlayer('Position', [20,
400, 700, 400]);
obj.maskPlayer = vision.VideoPlayer('Position', [740,
400, 700, 400]);
% Create system objects for foreground detection and
blob analysis
% The foreground detector is used to segment moving
objects from
% the background. It outputs a binary mask, where the
pixel value
% of 1 corresponds to the foreground and the value of
0 corresponds
% to the background.
Object Detection and Tracking - MATLAB & Simuli... http://www.mathworks.in/help/vision/gs/object-dete...
19 of 34 04/24/2014 07:10 PM
20. obj.detector =
vision.ForegroundDetector('NumGaussians', 3, ...
'NumTrainingFrames', 40,
'MinimumBackgroundRatio', 0.7);
% Connected groups of foreground pixels are likely to
correspond to moving
% objects. The blob analysis system object is used
to find such groups
% (called 'blobs' or 'connected components'), and
compute their
% characteristics, such as area, centroid, and the
bounding box.
obj.blobAnalyser =
vision.BlobAnalysis('BoundingBoxOutputPort', true, ...
'AreaOutputPort', true, 'CentroidOutputPort',
true, ...
'MinimumBlobArea', 400);
end
Initialize Tracks
The initializeTracks function creates an array of tracks, where each track is a structure
representing a moving object in the video. The purpose of the structure is to maintain the state of a
tracked object. The state consists of information used for detection to track assignment, track
termination, and display.
The structure contains the following fields:
id : the integer ID of the track
bbox : the current bounding box of the object; used for display
kalmanFilter : a Kalman filter object used for motion-based tracking
age : the number of frames since the track was first detected
totalVisibleCount : the total number of frames in which the track was detected (visible)
consecutiveInvisibleCount : the number of consecutive frames for which the track was not
detected (invisible).
Noisy detections tend to result in short-lived tracks. For this reason, the example only displays an
object after it was tracked for some number of frames. This happens when totalVisibleCount
exceeds a specified threshold.
Object Detection and Tracking - MATLAB & Simuli... http://www.mathworks.in/help/vision/gs/object-dete...
20 of 34 04/24/2014 07:10 PM
21. When no detections are associated with a track for several consecutive frames, the example
assumes that the object has left the field of view and deletes the track. This happens when
consecutiveInvisibleCount exceeds a specified threshold. A track may also get deleted as noise if
it was tracked for a short time, and marked invisible for most of the of the frames.
function tracks = initializeTracks()
% create an empty array of tracks
tracks = struct(...
'id', {}, ...
'bbox', {}, ...
'kalmanFilter', {}, ...
'age', {}, ...
'totalVisibleCount', {}, ...
'consecutiveInvisibleCount', {});
end
Read a Video Frame
Read the next video frame from the video file.
function frame = readFrame()
frame = obj.reader.step();
end
Detect Objects
The detectObjects function returns the centroids and the bounding boxes of the detected objects.
It also returns the binary mask, which has the same size as the input frame. Pixels with a value of 1
correspond to the foreground, and pixels with a value of 0 correspond to the background.
The function performs motion segmentation using the foreground detector. It then performs
morphological operations on the resulting binary mask to remove noisy pixels and to fill the holes in
the remaining blobs.
function [centroids, bboxes, mask] = detectObjects(frame)
% Detect foreground.
mask = obj.detector.step(frame);
% Apply morphological operations to remove noise and
fill in holes.
mask = imopen(mask, strel('rectangle', [3,3]));
mask = imclose(mask, strel('rectangle', [15, 15]));
Object Detection and Tracking - MATLAB & Simuli... http://www.mathworks.in/help/vision/gs/object-dete...
21 of 34 04/24/2014 07:10 PM
22. mask = imfill(mask, 'holes');
% Perform blob analysis to find connected components.
[~, centroids, bboxes] = obj.blobAnalyser.step(mask);
end
Predict New Locations of Existing Tracks
Use the Kalman filter to predict the centroid of each track in the current frame, and update its
bounding box accordingly.
function predictNewLocationsOfTracks()
for i = 1:length(tracks)
bbox = tracks(i).bbox;
% Predict the current location of the track.
predictedCentroid =
predict(tracks(i).kalmanFilter);
% Shift the bounding box so that its center is at
% the predicted location.
predictedCentroid = int32(predictedCentroid) -
bbox(3:4) / 2;
tracks(i).bbox = [predictedCentroid, bbox(3:4)];
end
end
Assign Detections to Tracks
Assigning object detections in the current frame to existing tracks is done by minimizing cost. The
cost is defined as the negative log-likelihood of a detection corresponding to a track.
The algorithm involves two steps:
Step 1: Compute the cost of assigning every detection to each track using the distance method of
the vision.KalmanFilter System object. The cost takes into account the Euclidean distance
between the predicted centroid of the track and the centroid of the detection. It also includes the
confidence of the prediction, which is maintained by the Kalman filter. The results are stored in an
MxN matrix, where M is the number of tracks, and N is the number of detections.
Step 2: Solve the assignment problem represented by the cost matrix using the
assignDetectionsToTracks function. The function takes the cost matrix and the cost of not
assigning any detections to a track.
The value for the cost of not assigning a detection to a track depends on the range of values
Object Detection and Tracking - MATLAB & Simuli... http://www.mathworks.in/help/vision/gs/object-dete...
22 of 34 04/24/2014 07:10 PM
23. returned by the distance method of the vision.KalmanFilter. This value must be tuned
experimentally. Setting it too low increases the likelihood of creating a new track, and may result in
track fragmentation. Setting it too high may result in a single track corresponding to a series of
separate moving objects.
The assignDetectionsToTracks function uses the Munkres' version of the Hungarian algorithm to
compute an assignment which minimizes the total cost. It returns an M x 2 matrix containing the
corresponding indices of assigned tracks and detections in its two columns. It also returns the
indices of tracks and detections that remained unassigned.
function [assignments, unassignedTracks,
unassignedDetections] = ...
detectionToTrackAssignment()
nTracks = length(tracks);
nDetections = size(centroids, 1);
% Compute the cost of assigning each detection to
each track.
cost = zeros(nTracks, nDetections);
for i = 1:nTracks
cost(i, :) = distance(tracks(i).kalmanFilter,
centroids);
end
% Solve the assignment problem.
costOfNonAssignment = 20;
[assignments, unassignedTracks, unassignedDetections]
= ...
assignDetectionsToTracks(cost,
costOfNonAssignment);
end
Update Assigned Tracks
The updateAssignedTracks function updates each assigned track with the corresponding detection.
It calls the correct method of vision.KalmanFilter to correct the location estimate. Next, it stores
the new bounding box, and increases the age of the track and the total visible count by 1. Finally,
the function sets the invisible count to 0.
function updateAssignedTracks()
numAssignedTracks = size(assignments, 1);
Object Detection and Tracking - MATLAB & Simuli... http://www.mathworks.in/help/vision/gs/object-dete...
23 of 34 04/24/2014 07:10 PM
24. for i = 1:numAssignedTracks
trackIdx = assignments(i, 1);
detectionIdx = assignments(i, 2);
centroid = centroids(detectionIdx, :);
bbox = bboxes(detectionIdx, :);
% Correct the estimate of the object's location
% using the new detection.
correct(tracks(trackIdx).kalmanFilter, centroid);
% Replace predicted bounding box with detected
% bounding box.
tracks(trackIdx).bbox = bbox;
% Update track's age.
tracks(trackIdx).age = tracks(trackIdx).age + 1;
% Update visibility.
tracks(trackIdx).totalVisibleCount = ...
tracks(trackIdx).totalVisibleCount + 1;
tracks(trackIdx).consecutiveInvisibleCount = 0;
end
end
Update Unassigned Tracks
Mark each unassigned track as invisible, and increase its age by 1.
function updateUnassignedTracks()
for i = 1:length(unassignedTracks)
ind = unassignedTracks(i);
tracks(ind).age = tracks(ind).age + 1;
tracks(ind).consecutiveInvisibleCount = ...
tracks(ind).consecutiveInvisibleCount + 1;
end
end
Delete Lost Tracks
The deleteLostTracks function deletes tracks that have been invisible for too many consecutive
frames. It also deletes recently created tracks that have been invisible for too many frames overall.
Object Detection and Tracking - MATLAB & Simuli... http://www.mathworks.in/help/vision/gs/object-dete...
24 of 34 04/24/2014 07:10 PM
25. function deleteLostTracks()
if isempty(tracks)
return;
end
invisibleForTooLong = 20;
ageThreshold = 8;
% Compute the fraction of the track's age for which
it was visible.
ages = [tracks(:).age];
totalVisibleCounts = [tracks(:).totalVisibleCount];
visibility = totalVisibleCounts ./ ages;
% Find the indices of 'lost' tracks.
lostInds = (ages < ageThreshold & visibility < 0.6) |
...
[tracks(:).consecutiveInvisibleCount] >=
invisibleForTooLong;
% Delete lost tracks.
tracks = tracks(~lostInds);
end
Create New Tracks
Create new tracks from unassigned detections. Assume that any unassigned detection is a start of
a new track. In practice, you can use other cues to eliminate noisy detections, such as size,
location, or appearance.
function createNewTracks()
centroids = centroids(unassignedDetections, :);
bboxes = bboxes(unassignedDetections, :);
for i = 1:size(centroids, 1)
centroid = centroids(i,:);
bbox = bboxes(i, :);
Object Detection and Tracking - MATLAB & Simuli... http://www.mathworks.in/help/vision/gs/object-dete...
25 of 34 04/24/2014 07:10 PM
26. % Create a Kalman filter object.
kalmanFilter =
configureKalmanFilter('ConstantVelocity', ...
centroid, [200, 50], [100, 25], 100);
% Create a new track.
newTrack = struct(...
'id', nextId, ...
'bbox', bbox, ...
'kalmanFilter', kalmanFilter, ...
'age', 1, ...
'totalVisibleCount', 1, ...
'consecutiveInvisibleCount', 0);
% Add it to the array of tracks.
tracks(end + 1) = newTrack;
% Increment the next id.
nextId = nextId + 1;
end
end
Display Tracking Results
The displayTrackingResults function draws a bounding box and label ID for each track on the
video frame and the foreground mask. It then displays the frame and the mask in their respective
video players.
function displayTrackingResults()
% Convert the frame and the mask to uint8 RGB.
frame = im2uint8(frame);
mask = uint8(repmat(mask, [1, 1, 3])) .* 255;
minVisibleCount = 8;
if ~isempty(tracks)
% Noisy detections tend to result in short-lived
tracks.
% Only display tracks that have been visible for
more than
Object Detection and Tracking - MATLAB & Simuli... http://www.mathworks.in/help/vision/gs/object-dete...
26 of 34 04/24/2014 07:10 PM
27. % a minimum number of frames.
reliableTrackInds = ...
[tracks(:).totalVisibleCount] >
minVisibleCount;
reliableTracks = tracks(reliableTrackInds);
% Display the objects. If an object has not been
detected
% in this frame, display its predicted bounding
box.
if ~isempty(reliableTracks)
% Get bounding boxes.
bboxes = cat(1, reliableTracks.bbox);
% Get ids.
ids = int32([reliableTracks(:).id]);
% Create labels for objects indicating the
ones for
% which we display the predicted rather than
the actual
% location.
labels = cellstr(int2str(ids'));
predictedTrackInds = ...
[reliableTracks(:).consecutiveInvisibleCount] > 0;
isPredicted = cell(size(labels));
isPredicted(predictedTrackInds) = {'
predicted'};
labels = strcat(labels, isPredicted);
% Draw the objects on the frame.
frame = insertObjectAnnotation(frame,
'rectangle', ...
bboxes, labels);
% Draw the objects on the mask.
mask = insertObjectAnnotation(mask,
Object Detection and Tracking - MATLAB & Simuli... http://www.mathworks.in/help/vision/gs/object-dete...
27 of 34 04/24/2014 07:10 PM
28. 'rectangle', ...
bboxes, labels);
end
end
% Display the mask and the frame.
obj.maskPlayer.step(mask);
obj.videoPlayer.step(frame);
end
Summary
This example created a motion-based system for detecting and tracking multiple moving objects.
Try using a different video to see if you are able to detect and track objects. Try modifying the
parameters for the detection, assignment, and deletion steps.
The tracking in this example was solely based on motion with the assumption that all objects move
in a straight line with constant speed. When the motion of an object significantly deviates from this
model, the example may produce tracking errors. Notice the mistake in tracking the person labeled
#12, when he is occluded by the tree.
The likelihood of tracking errors can be reduced by using a more complex motion model, such as
constant acceleration, or by using multiple Kalman filters for every object. Also, you can incorporate
other cues for associating detections over time, such as size, shape, and color.
end
Detecting Cars Using Gaussian Mixture Models
This example shows how to detect and count cars in a video sequence using foreground detector
based on Gaussian mixture models (GMMs).
Introduction
Step 1 - Import Video and Initialize Foreground Detector
Step 2 - Detect Cars in an Initial Video Frame
Step 3 - Process the Rest of Video Frames
Introduction
Detecting and counting cars can be used to analyze traffic patterns. Detection is also a first step
prior to performing more sophisticated tasks such as tracking or categorization of vehicles by their
type.
This example shows how to use the foreground detector and blob analysis to detect and count
cars in a video sequence. It assumes that the camera is stationary. The example focuses on
detecting objects. To learn more about tracking objects, see the example titled Motion-Based
Multiple Object Tracking.
Object Detection and Tracking - MATLAB & Simuli... http://www.mathworks.in/help/vision/gs/object-dete...
28 of 34 04/24/2014 07:10 PM
29. Step 1 - Import Video and Initialize Foreground Detector
Rather than immediately processing the entire video, the example starts by obtaining an initial
video frame in which the moving objects are segmented from the background. This helps to
gradually introduce the steps used to process the video.
The foreground detector requires a certain number of video frames in order to initialize the
Gaussian mixture model. This example uses the first 50 frames to initialize three Gaussian modes in
the mixture model.
foregroundDetector =
vision.ForegroundDetector('NumGaussians', 3, ...
'NumTrainingFrames', 50);
videoReader = vision.VideoFileReader('visiontraffic.avi');
for i = 1:150
frame = step(videoReader); % read the next video frame
foreground = step(foregroundDetector, frame);
end
After the training, the detector begins to output more reliable segmentation results. The two figures
below show one of the video frames and the foreground mask computed by the detector.
figure; imshow(frame); title('Video Frame');
figure; imshow(foreground); title('Foreground');
Object Detection and Tracking - MATLAB & Simuli... http://www.mathworks.in/help/vision/gs/object-dete...
29 of 34 04/24/2014 07:10 PM
30. Step 2 - Detect Cars in an Initial Video Frame
The foreground segmentation process is not perfect and often includes undesirable noise. The
example uses morphological opening to remove the noise and to fill gaps in the detected objects.
se = strel('square', 3);
filteredForeground = imopen(foreground, se);
figure; imshow(filteredForeground); title('Clean Foreground');
Next, we find bounding boxes of each connected component corresponding to a moving car by
Object Detection and Tracking - MATLAB & Simuli... http://www.mathworks.in/help/vision/gs/object-dete...
30 of 34 04/24/2014 07:10 PM
31. using vision.BlobAnalysis object. The object further filters the detected foreground by rejecting
blobs which contain fewer than 150 pixels.
blobAnalysis = vision.BlobAnalysis('BoundingBoxOutputPort',
true, ...
'AreaOutputPort', false, 'CentroidOutputPort', false, ...
'MinimumBlobArea', 150);
bbox = step(blobAnalysis, filteredForeground);
To highlight the detected cars, we draw green boxes around them.
result = insertShape(frame, 'Rectangle', bbox, 'Color',
'green');
The number of bounding boxes corresponds to the number of cars found in the video frame. We
display the number of found cars in the upper left corner of the processed video frame.
numCars = size(bbox, 1);
result = insertText(result, [10 10], numCars, 'BoxOpacity',
1, ...
'FontSize', 14);
figure; imshow(result); title('Detected Cars');
Step 3 - Process the Rest of Video Frames
In the final step, we process the remaining video frames.
Object Detection and Tracking - MATLAB & Simuli... http://www.mathworks.in/help/vision/gs/object-dete...
31 of 34 04/24/2014 07:10 PM
32. videoPlayer = vision.VideoPlayer('Name', 'Detected Cars');
videoPlayer.Position(3:4) = [650,400]; % window size:
[width, height]
se = strel('square', 3); % morphological filter for noise
removal
while ~isDone(videoReader)
frame = step(videoReader); % read the next video frame
% Detect the foreground in the current video frame
foreground = step(foregroundDetector, frame);
% Use morphological opening to remove noise in the
foreground
filteredForeground = imopen(foreground, se);
% Detect the connected components with the specified
minimum area, and
% compute their bounding boxes
bbox = step(blobAnalysis, filteredForeground);
% Draw bounding boxes around the detected cars
result = insertShape(frame, 'Rectangle', bbox, 'Color',
'green');
% Display the number of cars found in the video frame
numCars = size(bbox, 1);
result = insertText(result, [10 10], numCars,
'BoxOpacity', 1, ...
'FontSize', 14);
step(videoPlayer, result); % display the results
end
release(videoReader); % close the video file
Object Detection and Tracking - MATLAB & Simuli... http://www.mathworks.in/help/vision/gs/object-dete...
32 of 34 04/24/2014 07:10 PM
33. The output video displays the bounding boxes around the cars. It also displays the number of cars
in the upper left corner of the video.
Tracking Cars Using Optical Flow
This example shows how to detect and track cars in a video sequence using optical flow estimation.
Example Model
Tracking Cars Using Optical Flow Results
Available Example Versions
Example Model
The following figure shows the Tracking Cars Using Optical Flow model:
Tracking Cars Using Optical Flow Results
Object Detection and Tracking - MATLAB & Simuli... http://www.mathworks.in/help/vision/gs/object-dete...
33 of 34 04/24/2014 07:10 PM
34. The model uses an optical flow estimation technique to estimate the motion vectors in each frame
of the video sequence. By thresholding and performing morphological closing on the motion
vectors, the model produces binary feature images. The model locates the cars in each binary
feature image using the Blob Analysis block. Then it uses the Draw Shapes block to draw a green
rectangle around the cars that pass beneath the white line. The counter in the upper left corner of
the Results window tracks the number of cars in the region of interest.
Available Example Versions
Windows® only: viptrafficof_win.mdl
Platform independent: viptrafficof_all.mdl
Windows-only example models might contain compressed multimedia files or To Video Display
blocks, both of which are only supported on Windows platforms. The To Video Display block
supports code generation, and its performance is optimized for Windows.
Object Detection and Tracking - MATLAB & Simuli... http://www.mathworks.in/help/vision/gs/object-dete...
34 of 34 04/24/2014 07:10 PM