• beyond tellerrand – play. Register Now!
Zurück   Flashforum > Flash > Stuff

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 27-08-2010, 15:23   #1 (permalink)
~~~~~~~~~~~~
 
Benutzerbild von _geo_
 
Registriert seit: May 2002
Ort: AUSTRIA (OÖ)
Beiträge: 3.297
[AS3] [FP10] Farberkennung / Verfolgung in Bildern

Der ColorBlobDetector ermöglicht es in einem Bild Bereiche ähnlicher oder identer Farbe zu erkennen und liefert als Ergebnis Rectangle-Objekte zurück welche diese Bereiche umschließen.

Es gibt einige Konfigurationsparameter, aber die hier zu erklären wäre zu langwierig, dafür gibt`s ja die online Demo.

anschaun
saugen

Habs hier im FF als .zip.fla angehängt (wegen der Dateigrößenbeschränkung). Einfach .fla löschen und entpacken. Die .zip beinhaltet 3 Beispiele:

- Die Demo die online zu sehen ist.
- Eine MiniDemo als FlashDevelop Projekt.
- Eine MiniDemo als Flash CS4 Projekt.

Code-Beispiel:
ActionScript:
  1. package
  2. {
  3.     import at.geoathome.cv.blob.ColorBlobDetector;
  4.     import flash.display.Bitmap;
  5.     import flash.display.Sprite;
  6.     import flash.events.Event;
  7.     import flash.events.MouseEvent;
  8.     import flash.geom.Rectangle;
  9.  
  10.    
  11.     /**
  12.      * @author Georg Kamptner
  13.      *
  14.      * License: Do as you wish, but don`t be evil ;)
  15.      */
  16.     public class Main extends Sprite
  17.     {
  18.         // image
  19.         [Embed(source="image.png", mimeType="image/png")]
  20.         protected var Img:Class;
  21.         protected var _img:Bitmap;
  22.         protected var _imgContainer:Sprite;
  23.         protected var _graphicsContainer:Sprite;
  24.        
  25.         // color blob detector
  26.         protected var _colorBlobDetector:ColorBlobDetector;
  27.         private var _roi:Rectangle;
  28.        
  29.         public function Main():void
  30.         {
  31.             if (stage) init();
  32.             else addEventListener(Event.ADDED_TO_STAGE, init);
  33.         }
  34.        
  35.         protected function init(e:Event = null):void
  36.         {
  37.             removeEventListener(Event.ADDED_TO_STAGE, init);
  38.            
  39.             // create image
  40.             _img = new Img() as Bitmap;
  41.            
  42.             // Since Bitmap is not interactive we need a Sprite
  43.             // to handle mouse events.
  44.             _imgContainer = new Sprite();
  45.             _imgContainer.addChild(_img);
  46.             addChild(_imgContainer);
  47.            
  48.             // draw the found regions into this sprite
  49.             _graphicsContainer = new Sprite();
  50.             addChild(_graphicsContainer);
  51.            
  52.             // add mouse events
  53.             _imgContainer.addEventListener(MouseEvent.CLICK, detectColorUnterMouse);
  54.            
  55.             // detector (this is it) - debug version needs a sprite to draw into
  56.             _colorBlobDetector = new ColorBlobDetector( 2, 2000, 2, 2000);
  57.             _colorBlobDetector.setConfig(2.0, 6.0, 9.0);
  58.             _colorBlobDetector.setThresholds(8.0, 0.20, 0.0, 0.0);
  59.             _roi = new Rectangle(0, 0, _img.width, _img.height);
  60.         }
  61.        
  62.         protected function detectColorUnterMouse(e:MouseEvent):void
  63.         {
  64.             // get color unter mousecursor
  65.             var rgb:uint = _img.bitmapData.getPixel(_img.mouseX, _img.mouseY);
  66.             var r:uint = rgb >> 16;
  67.             var g:uint = rgb >> 8 & 0xff;
  68.             var b:uint = rgb & 0xff;
  69.            
  70.             // detect blobs
  71.             _colorBlobDetector.detectRGB(_img.bitmapData, r, g, b, _roi);
  72.            
  73.             // draw regions
  74.             _graphicsContainer.graphics.clear();
  75.             for (var i:uint = 0; i < _colorBlobDetector.numOfBlobs; ++i)
  76.             {
  77.                 _graphicsContainer.graphics.lineStyle(2, 0xff0000);
  78.                 _graphicsContainer.graphics.drawRect(_colorBlobDetector.blobs[i].x,
  79.                                                 _colorBlobDetector.blobs[i].y,
  80.                                                 _colorBlobDetector.blobs[i].width,
  81.                                                 _colorBlobDetector.blobs[i].height);
  82.             }
  83.            
  84.             // debug trace
  85.             trace(  "Blobs found: " + _colorBlobDetector.numOfBlobs +
  86.                     ", Duration in MS: " + _colorBlobDetector.detectionDuration +
  87.                     " in FPS: " + int(1000 / _colorBlobDetector.detectionDuration));
  88.         }
  89.  
  90.     }
  91.    
  92. }

Ist jetzt nicht etwas das absolute Neulinge sofort verwenden können, aber ich hoff mal es kann jemand gebrauchen.

lg
Angehängte Grafiken
Dateityp: jpg blog_color_tracker_resultat.jpg (10,4 KB, 24x aufgerufen)
Angehängte Dateien
Dateityp: fla ColorBlobDetector.zip.fla (916,3 KB, 16x aufgerufen)
__________________
--- :P ---

Blog
Bei unerwünschten Nebenwirkungen zerreißen Sie die Packungsbeilage oder erschlagen ihren Arzt oder Apotheker

Geändert von _geo_ (27-08-2010 um 15:24 Uhr)
_geo_ ist offline   Mit Zitat antworten
Alt 27-08-2010, 15:28   #2 (permalink)
flashforum
 
Benutzerbild von marc
 
Registriert seit: Jun 2001
Ort: krefeld
Beiträge: 13.784
Sehr cool. Vielen Dank dir. Finde das ist was für den Newsletter.
__________________
Wo sonst? TwitterFlickrXINGFacebook

beyond tellerrand

[ Wo findet ihr mich noch: twitterdribbblezootoolgoogle+facebookmarc.thielespoiler.web ]
marc ist offline   Mit Zitat antworten
Alt 27-08-2010, 15:40   #3 (permalink)
~~~~~~~~~~~~
 
Benutzerbild von _geo_
 
Registriert seit: May 2002
Ort: AUSTRIA (OÖ)
Beiträge: 3.297
Freut mich dass es gefällt

Steht im übrigen in direktem Zusammenhang zu dem Eintrag: http://www.flashforum.de/forum/check...ml#post1951638 Wenn ich mir den Verweis erlauben darf (hab dort nämlich noch kein neues Feedback bekommen)
__________________
--- :P ---

Blog
Bei unerwünschten Nebenwirkungen zerreißen Sie die Packungsbeilage oder erschlagen ihren Arzt oder Apotheker
_geo_ ist offline   Mit Zitat antworten
Alt 20-09-2010, 11:07   #4 (permalink)
Neuer User
 
Registriert seit: Sep 2003
Beiträge: 658
goil!
headkit ist offline   Mit Zitat antworten
Alt 13-11-2010, 20:14   #5 (permalink)
Neuer User
 
Registriert seit: Mar 2010
Beiträge: 146
Hey echt cool
Hab mal eine Frage, kann man beim [Embed(source="image.png", mimeType="image/png")]

auch eine Webcam einbinden?
Also so das er das die ganze zeit macht?

Also eine Webcam aufzurufen ist ja kein Problem undzwar:

PHP-Code:
var camera:Camera Camera.getCamera();
var 
video:Video = new Video(); 
video.attachCamera(camera);
addChild(video); 
Nun gibt es haufenweise Codes womit man daraus ein Bild speichert, aber das wollen wir ja nicht... gibt es da vielleicht schon lösungen?
DennisG ist offline   Mit Zitat antworten
Alt 14-11-2010, 17:45   #6 (permalink)
~~~~~~~~~~~~
 
Benutzerbild von _geo_
 
Registriert seit: May 2002
Ort: AUSTRIA (OÖ)
Beiträge: 3.297
Der Detector benötigt ein BitmapData Objekt als Eingabe: Also reicht es wenn du dein Video in eine Bitmapdata zeichnest (bitmapDataFromVideo.draw(video)) und diese dann an den Detector übergibst.

ActionScript:
  1. // bitmapdata in der größe des videeos erstellen
  2. var bitmapDataFromVideo:BitmapData = new BitmapData(video.width, video.height);
  3. bitmapDataFromVideo.draw(video);
  4.  
  5. // detect color in bitmap
  6. _colorBlobDetector.detectRGB(bitmapDataFromVideo, r, g, b, _roi);

Wenn noch was unklar ist einfach nachfragen

lg
__________________
--- :P ---

Blog
Bei unerwünschten Nebenwirkungen zerreißen Sie die Packungsbeilage oder erschlagen ihren Arzt oder Apotheker

Geändert von _geo_ (14-11-2010 um 17:48 Uhr)
_geo_ ist offline   Mit Zitat antworten
Alt 14-11-2010, 17:55   #7 (permalink)
Neuer User
 
Registriert seit: Mar 2010
Beiträge: 146
Joa hört sich gut an
habs auch probiert einzubauen aber klappt leider nicht...
wie/ wo müsste ich das einbauen?

also das hier

PHP-Code:
var camera:Camera Camera.getCamera();
var 
video:Video = new Video(); 
video.attachCamera(camera);
addChild(video); 

// bitmapdata in der größe des videeos erstellen
var bitmapDataFromVideo:BitmapData = new BitmapData(video.widthvideo.height);
bitmapDataFromVideo.draw(video);
// detect color in bitmap
_colorBlobDetector.detectRGB(bitmapDataFromVideorgb_roi); 
Würde ich dort hinein machen wo
PHP-Code:
70. #
            // detect blobs
71. #
            
_colorBlobDetector.detectRGB(_img.bitmapDatargb_roi); 
steht aber es sieht nich so aus als ob es etwas bringt...

wäre echt dankbar für weitere hilfe

Geändert von DennisG (14-11-2010 um 18:14 Uhr)
DennisG ist offline   Mit Zitat antworten
Alt 14-11-2010, 18:27   #8 (permalink)
~~~~~~~~~~~~
 
Benutzerbild von _geo_
 
Registriert seit: May 2002
Ort: AUSTRIA (OÖ)
Beiträge: 3.297
_img musst du durch bitmapDataFromVideo ersetzen.

Hab mal das Beispiel um ein Video erweitert:

ActionScript:
  1. /*
  2. mit USE_WEBCAM kann man auswählen ob man nun
  3. das Bild oder die Webcam nutzen möchte. Achtung falls
  4. du mehrere Webcams installiert hast musst du get
  5. getCamera() deine zu nutzende Webcam angeben ;)
  6. */
  7.  
  8. package
  9. {
  10.     import at.geoathome.cv.blob.ColorBlobDetector;
  11.     import flash.display.Bitmap;
  12.     import flash.display.BitmapData;
  13.     import flash.display.Sprite;
  14.     import flash.events.Event;
  15.     import flash.events.MouseEvent;
  16.     import flash.events.TimerEvent;
  17.     import flash.geom.Rectangle;
  18.     import flash.media.Camera;
  19.     import flash.media.Video;
  20.     import flash.utils.Timer;
  21.  
  22.    
  23.     /**
  24.      * @author Georg Kamptner
  25.      *
  26.      * License: Do as you wish, but don`t be evil ;)
  27.      */
  28.     public class Main extends Sprite
  29.     {
  30.         // image
  31.         [Embed(source="image.png", mimeType="image/png")]
  32.         protected var Img:Class;
  33.         protected var _img:Bitmap;
  34.         protected var _imgContainer:Sprite;
  35.         protected var _graphicsContainer:Sprite;
  36.        
  37.         // video / webcam
  38.         protected var _webcam:Camera;
  39.         protected var _video:Video;
  40.         protected var _bitmapDataFromVideo:BitmapData;
  41.         protected var _trackTimer:Timer;
  42.         protected var _colorFromVideoStorage:Object;
  43.        
  44.         public static var USE_WEBCAM:Boolean = false;
  45.        
  46.         // color blob detector
  47.         protected var _colorBlobDetector:ColorBlobDetector;
  48.         private var _roi:Rectangle;
  49.        
  50.         public function Main():void
  51.         {
  52.             if (stage) init();
  53.             else addEventListener(Event.ADDED_TO_STAGE, init);
  54.         }
  55.        
  56.         protected function init(e:Event = null):void
  57.         {
  58.             removeEventListener(Event.ADDED_TO_STAGE, init);
  59.            
  60.             if (!USE_WEBCAM)
  61.             { // image //
  62.                 // create image
  63.                 _img = new Img() as Bitmap;
  64.                
  65.                 // Since Bitmap is not interactive we need a Sprite
  66.                 // to handle mouse events.
  67.                 _imgContainer = new Sprite();
  68.                 _imgContainer.addChild(_img);
  69.                 addChild(_imgContainer);
  70.                
  71.                 // add mouse events
  72.                 _imgContainer.addEventListener(MouseEvent.CLICK, detectColorFromImageUnderMouse);
  73.             }
  74.             else
  75.             { // webcam //
  76.                 _webcam = Camera.getCamera();
  77.                 _webcam.setMode(320, 240, 20, false);
  78.                 _video = new Video();
  79.                 _video.attachCamera(_webcam);
  80.                
  81.                 // Since Video is not interactive we need a Sprite
  82.                 // to handle mouse events.
  83.                 _imgContainer = new Sprite();
  84.                 _imgContainer.addChild(_video);
  85.                 addChild(_imgContainer);
  86.                
  87.                 // add mouse events to select a color
  88.                 _colorFromVideoStorage = { r:255, g:255, b:255 };
  89.                 _imgContainer.addEventListener(MouseEvent.CLICK, getColorFromVideo);
  90.                
  91.                 _bitmapDataFromVideo = new BitmapData(_video.width, _video.height);
  92.                
  93.                 _trackTimer = new Timer(1000 / 20);
  94.                 _trackTimer.addEventListener(TimerEvent.TIMER, detectColorInVideo);
  95.                 _trackTimer.start();
  96.             }
  97.            
  98.             // draw the found regions into this sprite
  99.             _graphicsContainer = new Sprite();
  100.             addChild(_graphicsContainer);
  101.            
  102.             // detector (this is it) - debug version needs a sprite to draw into
  103.             _colorBlobDetector = new ColorBlobDetector( 2, 2000, 2, 2000);
  104.             _colorBlobDetector.setConfig(2.0, 6.0, 9.0);
  105.             _colorBlobDetector.setThresholds(8.0, 0.20, 0.0, 0.0);
  106.            
  107.             if (!USE_WEBCAM)
  108.             {
  109.                 _roi = new Rectangle(0, 0, _img.width, _img.height);
  110.             }
  111.             else
  112.             {
  113.                 _roi = new Rectangle(0, 0, _bitmapDataFromVideo.width, _bitmapDataFromVideo.height);
  114.             }
  115.         }
  116.        
  117.         private function getColorFromVideo(e:MouseEvent):void
  118.         {
  119.             // get color unter mousecursor
  120.             var rgb:uint = _bitmapDataFromVideo.getPixel(_video.mouseX, _video.mouseY);
  121.             _colorFromVideoStorage['r'] = rgb >> 16 & 0xff;
  122.             _colorFromVideoStorage['g'] = rgb >> 8 & 0xff;
  123.             _colorFromVideoStorage['b'] = rgb & 0xff;
  124.         }
  125.        
  126.         private function detectColorInVideo(e:TimerEvent):void
  127.         {
  128.             // draw video into bitmapdata
  129.             _bitmapDataFromVideo.draw(_video);
  130.            
  131.             // detect blobs
  132.             _colorBlobDetector.detectRGB(_bitmapDataFromVideo,  _colorFromVideoStorage['r'],
  133.                                                                 _colorFromVideoStorage['g'],
  134.                                                                 _colorFromVideoStorage['b'], _roi);
  135.            
  136.             // draw regions
  137.             _graphicsContainer.graphics.clear();
  138.             for (var i:uint = 0; i < _colorBlobDetector.numOfBlobs; ++i)
  139.             {
  140.                 _graphicsContainer.graphics.lineStyle(2, 0xff0000);
  141.                 _graphicsContainer.graphics.drawRect(_colorBlobDetector.blobs[i].x,
  142.                                                 _colorBlobDetector.blobs[i].y,
  143.                                                 _colorBlobDetector.blobs[i].width,
  144.                                                 _colorBlobDetector.blobs[i].height);
  145.             }
  146.            
  147.             // debug trace
  148.             trace("Blobs found: " + _colorBlobDetector.numOfBlobs +
  149.             ", Duration in MS: " + _colorBlobDetector.detectionDuration +
  150.             " in FPS: " + int(1000 / _colorBlobDetector.detectionDuration));
  151.  
  152.         }
  153.        
  154.         protected function detectColorFromImageUnderMouse(e:MouseEvent):void
  155.         {
  156.             // get color under mousecursor
  157.             var rgb:uint = _img.bitmapData.getPixel(_img.mouseX, _img.mouseY);
  158.             var r:uint = rgb >> 16;
  159.             var g:uint = rgb >> 8 & 0xff;
  160.             var b:uint = rgb & 0xff;
  161.            
  162.             // detect blobs
  163.             _colorBlobDetector.detectRGB(_img.bitmapData, r, g, b, _roi);
  164.            
  165.             // draw regions
  166.             _graphicsContainer.graphics.clear();
  167.             for (var i:uint = 0; i < _colorBlobDetector.numOfBlobs; ++i)
  168.             {
  169.                 _graphicsContainer.graphics.lineStyle(2, 0xff0000);
  170.                 _graphicsContainer.graphics.drawRect(_colorBlobDetector.blobs[i].x,
  171.                                                 _colorBlobDetector.blobs[i].y,
  172.                                                 _colorBlobDetector.blobs[i].width,
  173.                                                 _colorBlobDetector.blobs[i].height);
  174.             }
  175.            
  176.             // debug trace
  177.             trace("Blobs found: " + _colorBlobDetector.numOfBlobs +
  178.             ", Duration in MS: " + _colorBlobDetector.detectionDuration +
  179.             " in FPS: " + int(1000 / _colorBlobDetector.detectionDuration));
  180.         }
  181.  
  182.     }
  183.    
  184. }
__________________
--- :P ---

Blog
Bei unerwünschten Nebenwirkungen zerreißen Sie die Packungsbeilage oder erschlagen ihren Arzt oder Apotheker

Geändert von _geo_ (14-11-2010 um 18:53 Uhr)
_geo_ ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Stichworte
color

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Sound in FP10 tengelman ActionScript 3 4 13-07-2009 16:53
FP10 - Error #2176 marcorei ActionScript 3 2 05-05-2009 15:22
Neue FP10-Features mbenfer ActionScript 3 1 24-11-2008 19:38
fp10 für linux Barschel2004 Am Rande 4 24-11-2008 17:03
ASDoc und FP10 celebremus Flex programmieren 4 08-09-2008 16:21


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:28 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele