SlideShare a Scribd company logo
1 of 40
Download to read offline
How to Make Hand Detector
on Native Activity with OpenCV
Noritsuna Imamura
noritsuna@siprop.org

©SIProp Project, 2006-2008

1
Agenda
Preparing
Benchmark
How to Load Files on NativeActivity

How to Make Hand Detector
Calculate Histgram of Skin Color
Detect Skin Area from CapImage
Calculate the Largest Skin Area
Matching Histgrams

©SIProp Project, 2006-2008

2
Hand Detector

©SIProp Project, 2006-2008

3
Chart of Hand Detector
Calc Histgram of
Skin Color

Detect Skin Area
from CapImage

Calc the Largest
Skin Area

Matching
Histgrams
©SIProp Project, 2006-2008

4
Chart of Hand Detector
Calc Histgram of
Skin Color

Histgram

Detect Skin Area
from CapImage

Convex Hull

Calc the Largest
Skin Area

Labeling

Matching
Histgrams

Feature Point
Distance
©SIProp Project, 2006-2008

5
Mat vs IplImage
Benchmark

©SIProp Project, 2006-2008

6
About Mat & IplImage
cv::Mat

IplImage

Version 2.x and Upper
Written by C++

Version 1.x and Upper
Written by C

Advantage

Advantage

Easy to Use
Faster
1.
2.
3.
4.
5.
6.
7.
8.
9.

cv::Mat_<cv::Vec3b> img;
for (int r = 0; r < img.rows; r++ ) {
for(int c = 0; c < img.cols; c++ ) {
cv::Vec3b &v =
img.at<cv::Vec3b>(r,c);
v[0] = 0;//B
v[1] = 0;//G
v[2] = 0;//R
}
}

Many Documents
1.
2.
3.
4.
5.
6.
7.
8.

IplImage* img;
for(int h = 0; h < img->height; h++) {
for(int w = 0; w < img->width; w++){
img->imageData[img>widthStep * h + w * 3 + 0]=0;//B
img->imageData[img>widthStep * h + w * 3 + 1]=0;//G
img->imageData[img>widthStep * h + w * 3 + 2]=0;//R
}
7
}
©SIProp Project, 2006-2008
Benchmark on Android
Gray Scale
Download Here:
http://github.com/noritsuna/MatIplBenchmark

©SIProp Project, 2006-2008

8
How to Load File on NativeActivity

©SIProp Project, 2006-2008

9
AssetManager
“assets” dir is your resource file dir on Android
“res”(resource) dir is also same. But the file that is
there is made “Resource ID” by R file.
Ex. I18n

How to Use
NDK with Java
AAssetManager Class (C++)

NativeActivity
AssetManager4NativeActivity by me
http://github.com/noritsuna/AssetManager4NativeActivity

©SIProp Project, 2006-2008

10
AssetManager4NativeActivity
Android.mk
1.
2.
3.
4.

include $(CLEAR_VARS)
LOCAL_MODULE:=assetmanager
LOCAL_SRC_FILES:=../AssetManager4NativeActivity/li
bassetmanager.a
include $(PREBUILT_STATIC_LIBRARY)

5.

LOCAL_STATIC_LIBRARIES += assetmanager

Copy header File & static lib
assetmanager.h
libassetmanager.a
©SIProp Project, 2006-2008

11
AssetManager4NativeActivity
assetmanager.h
int setupAsset(const char *package_name);
Copy "assets" directory from APK file to under
"/data/data/[Package Name]" directory.

int loadAseetFile(const char *package_name, const
char *load_file_name);
Copy File of "load_file_name" from APK file to under
"/data/data/[Package Name]/assets" directory.

1.
2.

3.

createAssetFile("assets/images/skincolorsample.jpg");
sprintf(file_path, "%s/%s/%s", “/data/data”,
PACKAGE_NAME,
"assets/images/skincolorsample.jpg");
skin_color_sample = cvLoadImage(file_path);
©SIProp Project, 2006-2008

12
How to Make Hand Detector

©SIProp Project, 2006-2008

13
Hand Detector
Sample Source Code:
http://github.com/noritsuna/HandDetector

©SIProp Project, 2006-2008

14
Chart of Hand Detector
Calc Histgram of
Skin Color

Detect Skin Area
from CapImage

Calc the Largest
Skin Area

Matching
Histgrams
©SIProp Project, 2006-2008

15
Chart of Hand Detector
Calc Histgram of
Skin Color

Histgram

Detect Skin Area
from CapImage

Convex Hull

Calc the Largest
Skin Area

Labeling

Matching
Histgrams

Feature Point
Distance
©SIProp Project, 2006-2008

16
Calculate Histgram of Skin Color

©SIProp Project, 2006-2008

17
What’s Histgram?
Frequency Distribution Chart.
Why Use it?
For Checking Skin Color.
Each people’s Skin Color
is NOT same.
One of Leveling algorithm.

©SIProp Project, 2006-2008

18
Step 1/2
Convert RGB to HSV
RGB color is changed by Light Color.
Hue
Saturation/Chroma
Value/Lightness/Brightness

1.

cvCvtColor( src, hsv, CV_BGR2HSV );

2.

IplImage* h_plane
IPL_DEPTH_8U, 1
IplImage* s_plane
IPL_DEPTH_8U, 1
IplImage* v_plane
IPL_DEPTH_8U, 1

3.
4.

= cvCreateImage( size,
);
= cvCreateImage( size,
);
= cvCreateImage( size,
);
©SIProp Project, 2006-2008

19
Step 2/2
cvCreateHist();
Prameter
Dimension of Histgram
Size
Type
Range of limit
Over limit Use or Not
1.
2.
3.
4.
5.
6.
7.
8.

IplImage* planes[] = { h_plane, s_plane };
*hist = cvCreateHist(2,
hist_size,
CV_HIST_ARRAY,
ranges,
1);
cvCalcHist( planes, *hist, 0, 0 );
cvMinMaxLoc(v_plane, vmin, vmax);
©SIProp Project, 2006-2008

20
Detect Skin Area from CapImage

©SIProp Project, 2006-2008

21
How to Get Skin Area?
Use “Convex Hull” algorithm
1.
2.
3.
4.
5.

Check Image From Left-Top.
Found Black Color Pixel is Start Point.
Search Black Pixel by Right Image.
Go to Black Pixel that First Found, this is next point.
Do 2-4 again, if back to Start Point, get Convex Hull.
※Convert to Black-White Image

Image Source: http://homepage2.nifty.com/tsugu/sotuken/ronbun/sec3-2.html#0013
©SIProp Project, 2006-2008

22
Step 1/3
Delete V(Lightness/Brightness) Color
1. Calculate Back Project Image by Skin Color
Histgram.
2. Threshold by V(Lightness/Brightness) Color.
3. And Operation between Mask and Back Project.
4. Threshold to Back Project. (Adjustment)
1.

cvCalcBackProject(planes, backProjectImage, hist);

2.

cvThreshold(v_plane, maskImage, *v_min, *v_max,
CV_THRESH_BINARY);
cvAnd(backProjectImage, maskImage,
backProjectImage);

3.

4.

cvThreshold(backProjectImage, dstImage, 10, 255,

CV_THRESH_BINARY);

©SIProp Project, 2006-2008

23
Step 2/3
Noise Reduction
1. Erode (scale-down)
2. Dilate (scale-up)

1/4
1.
2.

cvErode(dstImage, dstImage, NULL, 1);
cvDilate(dstImage, dstImage, NULL, 1);
©SIProp Project, 2006-2008

24
Step 3/3
Convex Hull
cvFindContours();
Source Image
Convex that is detected
First Convex Pointer that detected

1.

cvFindContours(dstImage, storage, &contours);

©SIProp Project, 2006-2008

25
Calculate the Largest Skin Area

©SIProp Project, 2006-2008

26
What’s Labeling?
Labeling
Area Marking Algorithm.
4-Connection
8-Connection

Image Source: http://imagingsolution.blog107.fc2.com/blog-entry-193.html
©SIProp Project, 2006-2008

27
Labeling Algorithm 1/4
1, Scan Image by Raster
2, If you got a White Pixel,
1, Check Right Image Pixels
2, All “0”, Put the Latest Number + 1 in Pixel

©SIProp Project, 2006-2008

28
Labeling Algorithm 2/4
1, If you got a White Pixel,
1, Check Right Image Orange Pixels
2, Not “0”,
The Lowest Orange Pixels Number in Pixel

©SIProp Project, 2006-2008

29
Labeling Algorithm 3/4
1, If got 2 more Number in Orange Pixeles,
1, Put The Lowest Number in Pixel,
Change Other Numbers’ “Look up table”
to The Lowest Number.

©SIProp Project, 2006-2008

30
Labeling Algorithm 4/4
1, After finish, Check “Look up Table”.
1, If Dst is NOT Serial Number,
Change to Serial Number
2, Src is changed Dst Number.

©SIProp Project, 2006-2008

31
Get Area Size
cvContourArea();

1.
2.
3.
4.
5.
6.
7.

for (CvSeq* c= contours; c != NULL; c = c->h_next){
double area = abs(cvContourArea(c,
CV_WHOLE_SEQ));
if (maxArea < area) {
maxArea = area;
hand_ptr = c;
}
}

©SIProp Project, 2006-2008

32
Matching Histgrams

©SIProp Project, 2006-2008

33
Matching Histgrams
Histgram of Oriented Gradients (HoG)
Split Some Area, And Calc Histgram of each Area.

©SIProp Project, 2006-2008

34
Why Use HoG?
Matching Hand Shape.
Use Feature Point Distance with Each HoG.

©SIProp Project, 2006-2008

35
Step 1/3
Calculate each Cell (Block(3x3) with Edge Pixel(5x5))
luminance gradient moment
luminance gradient degree=deg
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.

for(int y=0; y<height; y++){
for(int x=0; x<width; x++){
if(x==0 || y==0 || x==width-1 || y==height-1){
continue;
}
double dx = img->imageData[y*img>widthStep+(x+1)] - img->imageData[y*img->widthStep+(x-1)];
double dy = img->imageData[(y+1)*img>widthStep+x] - img->imageData[(y-1)*img->widthStep+x];
double m = sqrt(dx*dx+dy*dy);
double deg = (atan2(dy, dx)+CV_PI) * 180.0 / CV_PI;
int bin = CELL_BIN * deg/360.0;
if(bin < 0) bin=0;
if(bin >= CELL_BIN) bin = CELL_BIN-1;
hist[(int)(x/CELL_X)][(int)(y/CELL_Y)][bin] += m;
}
}

©SIProp Project, 2006-2008

36
Step 2/3
Calculate Feature Vector of Each Block
(Go to Next Page)

1.
2.

for(int y=0; y<BLOCK_HEIGHT; y++){
for(int x=0; x<BLOCK_WIDTH; x++){

3.
4.
5.
6.
7.
8.
9.

//Calculate Feature Vector in Block
double vec[BLOCK_DIM];
memset(vec, 0, BLOCK_DIM*sizeof(double));
for(int j=0; j<BLOCK_Y; j++){
for(int i=0; i<BLOCK_X; i++){
for(int d=0; d<CELL_BIN; d++){
int index =
j*(BLOCK_X*CELL_BIN) + i*CELL_BIN + d;
vec[index] =
hist[x+i][y+j][d];
}
}
}

10.

11.
12.
13.

©SIProp Project, 2006-2008

37
Step 3/3
(Continued)

Normalize Vector
Set Feature Vector
1.
2.
3.
4.
5.
6.
7.
8.

//Normalization of Vector
double norm = 0.0;
for(int i=0; i<BLOCK_DIM; i++){
norm += vec[i]*vec[i];
}
for(int i=0; i<BLOCK_DIM; i++){
vec[i] /= sqrt(norm + 1.0);
}

9.
10.
11.

//Put feat
for(int i=0; i<BLOCK_DIM; i++){
int index = y*BLOCK_WIDTH*BLOCK_DIM
+ x*BLOCK_DIM + i;

12.
13.
14.
15.

feat[index] = vec[i];
}
}
}

©SIProp Project, 2006-2008

38
How to Calc Approximation
Calc HoG Distance of each block
Get Average.

©SIProp Project, 2006-2008

39
Step 1/1
Calulate Feature Point Distance

1.
2.
3.
4.
5.

double dist = 0.0;
for(int i = 0; i < TOTAL_DIM; i++){
dist += fabs(feat1[i] - feat2[i])*fabs(feat1[i]
- feat2[i]);
}
return sqrt(dist);

©SIProp Project, 2006-2008

40

More Related Content

What's hot

eStargzイメージとlazy pullingによる高速なコンテナ起動
eStargzイメージとlazy pullingによる高速なコンテナ起動eStargzイメージとlazy pullingによる高速なコンテナ起動
eStargzイメージとlazy pullingによる高速なコンテナ起動Kohei Tokunaga
 
The overview of lazypull with containerd Remote Snapshotter & Stargz Snapshotter
The overview of lazypull with containerd Remote Snapshotter & Stargz SnapshotterThe overview of lazypull with containerd Remote Snapshotter & Stargz Snapshotter
The overview of lazypull with containerd Remote Snapshotter & Stargz SnapshotterKohei Tokunaga
 
Stargz Snapshotter: イメージのpullを省略しcontainerdでコンテナを高速に起動する
Stargz Snapshotter: イメージのpullを省略しcontainerdでコンテナを高速に起動するStargz Snapshotter: イメージのpullを省略しcontainerdでコンテナを高速に起動する
Stargz Snapshotter: イメージのpullを省略しcontainerdでコンテナを高速に起動するKohei Tokunaga
 
Mobile development in 2020
Mobile development in 2020 Mobile development in 2020
Mobile development in 2020 Bogusz Jelinski
 
【CNDO2021】Calicoのデプロイをミスって本番クラスタを壊しそうになった話
【CNDO2021】Calicoのデプロイをミスって本番クラスタを壊しそうになった話【CNDO2021】Calicoのデプロイをミスって本番クラスタを壊しそうになった話
【CNDO2021】Calicoのデプロイをミスって本番クラスタを壊しそうになった話katsuya kawabe
 
containerdの概要と最近の機能
containerdの概要と最近の機能containerdの概要と最近の機能
containerdの概要と最近の機能Kohei Tokunaga
 
Faster Container Image Distribution on a Variety of Tools with Lazy Pulling
Faster Container Image Distribution on a Variety of Tools with Lazy PullingFaster Container Image Distribution on a Variety of Tools with Lazy Pulling
Faster Container Image Distribution on a Variety of Tools with Lazy PullingKohei Tokunaga
 
Build and Run Containers With Lazy Pulling - Adoption status of containerd St...
Build and Run Containers With Lazy Pulling - Adoption status of containerd St...Build and Run Containers With Lazy Pulling - Adoption status of containerd St...
Build and Run Containers With Lazy Pulling - Adoption status of containerd St...Kohei Tokunaga
 
Startup Containers in Lightning Speed with Lazy Image Distribution
Startup Containers in Lightning Speed with Lazy Image DistributionStartup Containers in Lightning Speed with Lazy Image Distribution
Startup Containers in Lightning Speed with Lazy Image DistributionKohei Tokunaga
 
Dev fest 2020 taiwan how to debug microservices on kubernetes as a pros (ht...
Dev fest 2020 taiwan   how to debug microservices on kubernetes as a pros (ht...Dev fest 2020 taiwan   how to debug microservices on kubernetes as a pros (ht...
Dev fest 2020 taiwan how to debug microservices on kubernetes as a pros (ht...KAI CHU CHUNG
 
DockerとKubernetesをかけめぐる
DockerとKubernetesをかけめぐるDockerとKubernetesをかけめぐる
DockerとKubernetesをかけめぐるKohei Tokunaga
 
Reactive Programming by UniRx for Asynchronous & Event Processing
Reactive Programming by UniRx for Asynchronous & Event ProcessingReactive Programming by UniRx for Asynchronous & Event Processing
Reactive Programming by UniRx for Asynchronous & Event ProcessingYoshifumi Kawai
 
"The OpenCV Open Source Computer Vision Library: Latest Developments," a Pres...
"The OpenCV Open Source Computer Vision Library: Latest Developments," a Pres..."The OpenCV Open Source Computer Vision Library: Latest Developments," a Pres...
"The OpenCV Open Source Computer Vision Library: Latest Developments," a Pres...Edge AI and Vision Alliance
 
Coscup x ruby conf tw 2021 google cloud buildpacks 剖析與實踐
Coscup x ruby conf tw 2021  google cloud buildpacks 剖析與實踐Coscup x ruby conf tw 2021  google cloud buildpacks 剖析與實踐
Coscup x ruby conf tw 2021 google cloud buildpacks 剖析與實踐KAI CHU CHUNG
 
Swift Cloud Workshop - Swift Microservices
Swift Cloud Workshop - Swift MicroservicesSwift Cloud Workshop - Swift Microservices
Swift Cloud Workshop - Swift MicroservicesChris Bailey
 
DEEP: a user success story
DEEP: a user success storyDEEP: a user success story
DEEP: a user success storyEOSC-hub project
 
Kernel Recipes 2014 - kGraft: Live Patching of the Linux Kernel
Kernel Recipes 2014 - kGraft: Live Patching of the Linux KernelKernel Recipes 2014 - kGraft: Live Patching of the Linux Kernel
Kernel Recipes 2014 - kGraft: Live Patching of the Linux KernelAnne Nicolas
 
TensorFlow, Docker & GoLang - All for Image Rekognition Sangam Biradar(Engine...
TensorFlow, Docker & GoLang - All for Image Rekognition Sangam Biradar(Engine...TensorFlow, Docker & GoLang - All for Image Rekognition Sangam Biradar(Engine...
TensorFlow, Docker & GoLang - All for Image Rekognition Sangam Biradar(Engine...sangam biradar
 
Build microservice with gRPC in golang
Build microservice with gRPC in golangBuild microservice with gRPC in golang
Build microservice with gRPC in golangTing-Li Chou
 

What's hot (20)

eStargzイメージとlazy pullingによる高速なコンテナ起動
eStargzイメージとlazy pullingによる高速なコンテナ起動eStargzイメージとlazy pullingによる高速なコンテナ起動
eStargzイメージとlazy pullingによる高速なコンテナ起動
 
The overview of lazypull with containerd Remote Snapshotter & Stargz Snapshotter
The overview of lazypull with containerd Remote Snapshotter & Stargz SnapshotterThe overview of lazypull with containerd Remote Snapshotter & Stargz Snapshotter
The overview of lazypull with containerd Remote Snapshotter & Stargz Snapshotter
 
Stargz Snapshotter: イメージのpullを省略しcontainerdでコンテナを高速に起動する
Stargz Snapshotter: イメージのpullを省略しcontainerdでコンテナを高速に起動するStargz Snapshotter: イメージのpullを省略しcontainerdでコンテナを高速に起動する
Stargz Snapshotter: イメージのpullを省略しcontainerdでコンテナを高速に起動する
 
Mobile development in 2020
Mobile development in 2020 Mobile development in 2020
Mobile development in 2020
 
Resume
ResumeResume
Resume
 
【CNDO2021】Calicoのデプロイをミスって本番クラスタを壊しそうになった話
【CNDO2021】Calicoのデプロイをミスって本番クラスタを壊しそうになった話【CNDO2021】Calicoのデプロイをミスって本番クラスタを壊しそうになった話
【CNDO2021】Calicoのデプロイをミスって本番クラスタを壊しそうになった話
 
containerdの概要と最近の機能
containerdの概要と最近の機能containerdの概要と最近の機能
containerdの概要と最近の機能
 
Faster Container Image Distribution on a Variety of Tools with Lazy Pulling
Faster Container Image Distribution on a Variety of Tools with Lazy PullingFaster Container Image Distribution on a Variety of Tools with Lazy Pulling
Faster Container Image Distribution on a Variety of Tools with Lazy Pulling
 
Build and Run Containers With Lazy Pulling - Adoption status of containerd St...
Build and Run Containers With Lazy Pulling - Adoption status of containerd St...Build and Run Containers With Lazy Pulling - Adoption status of containerd St...
Build and Run Containers With Lazy Pulling - Adoption status of containerd St...
 
Startup Containers in Lightning Speed with Lazy Image Distribution
Startup Containers in Lightning Speed with Lazy Image DistributionStartup Containers in Lightning Speed with Lazy Image Distribution
Startup Containers in Lightning Speed with Lazy Image Distribution
 
Dev fest 2020 taiwan how to debug microservices on kubernetes as a pros (ht...
Dev fest 2020 taiwan   how to debug microservices on kubernetes as a pros (ht...Dev fest 2020 taiwan   how to debug microservices on kubernetes as a pros (ht...
Dev fest 2020 taiwan how to debug microservices on kubernetes as a pros (ht...
 
DockerとKubernetesをかけめぐる
DockerとKubernetesをかけめぐるDockerとKubernetesをかけめぐる
DockerとKubernetesをかけめぐる
 
Reactive Programming by UniRx for Asynchronous & Event Processing
Reactive Programming by UniRx for Asynchronous & Event ProcessingReactive Programming by UniRx for Asynchronous & Event Processing
Reactive Programming by UniRx for Asynchronous & Event Processing
 
"The OpenCV Open Source Computer Vision Library: Latest Developments," a Pres...
"The OpenCV Open Source Computer Vision Library: Latest Developments," a Pres..."The OpenCV Open Source Computer Vision Library: Latest Developments," a Pres...
"The OpenCV Open Source Computer Vision Library: Latest Developments," a Pres...
 
Coscup x ruby conf tw 2021 google cloud buildpacks 剖析與實踐
Coscup x ruby conf tw 2021  google cloud buildpacks 剖析與實踐Coscup x ruby conf tw 2021  google cloud buildpacks 剖析與實踐
Coscup x ruby conf tw 2021 google cloud buildpacks 剖析與實踐
 
Swift Cloud Workshop - Swift Microservices
Swift Cloud Workshop - Swift MicroservicesSwift Cloud Workshop - Swift Microservices
Swift Cloud Workshop - Swift Microservices
 
DEEP: a user success story
DEEP: a user success storyDEEP: a user success story
DEEP: a user success story
 
Kernel Recipes 2014 - kGraft: Live Patching of the Linux Kernel
Kernel Recipes 2014 - kGraft: Live Patching of the Linux KernelKernel Recipes 2014 - kGraft: Live Patching of the Linux Kernel
Kernel Recipes 2014 - kGraft: Live Patching of the Linux Kernel
 
TensorFlow, Docker & GoLang - All for Image Rekognition Sangam Biradar(Engine...
TensorFlow, Docker & GoLang - All for Image Rekognition Sangam Biradar(Engine...TensorFlow, Docker & GoLang - All for Image Rekognition Sangam Biradar(Engine...
TensorFlow, Docker & GoLang - All for Image Rekognition Sangam Biradar(Engine...
 
Build microservice with gRPC in golang
Build microservice with gRPC in golangBuild microservice with gRPC in golang
Build microservice with gRPC in golang
 

Similar to How to Make Hand Detector on Native Activity with OpenCV

Lossless Encryption using BITPLANE and EDGEMAP Crypt Algorithms
Lossless Encryption using BITPLANE and EDGEMAP Crypt AlgorithmsLossless Encryption using BITPLANE and EDGEMAP Crypt Algorithms
Lossless Encryption using BITPLANE and EDGEMAP Crypt AlgorithmsIRJET Journal
 
426 lecture 4: AR Developer Tools
426 lecture 4: AR Developer Tools426 lecture 4: AR Developer Tools
426 lecture 4: AR Developer ToolsMark Billinghurst
 
Intro to computer vision in .net
Intro to computer vision in .netIntro to computer vision in .net
Intro to computer vision in .netStephen Lorello
 
Polymer Brush Data Processor
Polymer Brush Data ProcessorPolymer Brush Data Processor
Polymer Brush Data ProcessorCory Bethrant
 
Flow Trajectory Approach for Human Action Recognition
Flow Trajectory Approach for Human Action RecognitionFlow Trajectory Approach for Human Action Recognition
Flow Trajectory Approach for Human Action RecognitionIRJET Journal
 
Foreground algorithms for detection and extraction of an object in multimedia...
Foreground algorithms for detection and extraction of an object in multimedia...Foreground algorithms for detection and extraction of an object in multimedia...
Foreground algorithms for detection and extraction of an object in multimedia...IJECEIAES
 
GIS 5103 – Fundamentals of GISLecture 83D GIS.docx
GIS 5103 – Fundamentals of GISLecture 83D GIS.docxGIS 5103 – Fundamentals of GISLecture 83D GIS.docx
GIS 5103 – Fundamentals of GISLecture 83D GIS.docxshericehewat
 
Point cloud mesh-investigation_report-lihang
Point cloud mesh-investigation_report-lihangPoint cloud mesh-investigation_report-lihang
Point cloud mesh-investigation_report-lihangLihang Li
 
The next generation of the Montage image mosaic engine
The next generation of the Montage image mosaic engineThe next generation of the Montage image mosaic engine
The next generation of the Montage image mosaic engineG. Bruce Berriman
 
Computer graphics
Computer graphics Computer graphics
Computer graphics shafiq sangi
 
Developing AIR for Android with Flash Professional CS5
Developing AIR for Android with Flash Professional CS5Developing AIR for Android with Flash Professional CS5
Developing AIR for Android with Flash Professional CS5Chris Griffith
 
COSC 426 Lect. 3 -AR Developer Tools
COSC 426 Lect. 3 -AR Developer ToolsCOSC 426 Lect. 3 -AR Developer Tools
COSC 426 Lect. 3 -AR Developer ToolsMark Billinghurst
 
IRJET- Real Time Implementation of Bi-Histogram Equalization Method on Androi...
IRJET- Real Time Implementation of Bi-Histogram Equalization Method on Androi...IRJET- Real Time Implementation of Bi-Histogram Equalization Method on Androi...
IRJET- Real Time Implementation of Bi-Histogram Equalization Method on Androi...IRJET Journal
 
IRJET- Design and Implementation of ATM Security System using Vibration Senso...
IRJET- Design and Implementation of ATM Security System using Vibration Senso...IRJET- Design and Implementation of ATM Security System using Vibration Senso...
IRJET- Design and Implementation of ATM Security System using Vibration Senso...IRJET Journal
 
IRJET-Reversible Image Watermarking Based on Histogram Shifting Technique
IRJET-Reversible Image Watermarking Based on Histogram Shifting TechniqueIRJET-Reversible Image Watermarking Based on Histogram Shifting Technique
IRJET-Reversible Image Watermarking Based on Histogram Shifting TechniqueIRJET Journal
 
Reversible Image Watermarking Based on Histogram Shifting Technique
Reversible Image Watermarking Based on Histogram Shifting TechniqueReversible Image Watermarking Based on Histogram Shifting Technique
Reversible Image Watermarking Based on Histogram Shifting TechniqueIRJET Journal
 
Final Design Project - Memo (with GUI)
Final Design Project - Memo (with GUI)Final Design Project - Memo (with GUI)
Final Design Project - Memo (with GUI)Alex Larcheveque
 

Similar to How to Make Hand Detector on Native Activity with OpenCV (20)

Lossless Encryption using BITPLANE and EDGEMAP Crypt Algorithms
Lossless Encryption using BITPLANE and EDGEMAP Crypt AlgorithmsLossless Encryption using BITPLANE and EDGEMAP Crypt Algorithms
Lossless Encryption using BITPLANE and EDGEMAP Crypt Algorithms
 
426 lecture 4: AR Developer Tools
426 lecture 4: AR Developer Tools426 lecture 4: AR Developer Tools
426 lecture 4: AR Developer Tools
 
Intro to computer vision in .net
Intro to computer vision in .netIntro to computer vision in .net
Intro to computer vision in .net
 
Polymer Brush Data Processor
Polymer Brush Data ProcessorPolymer Brush Data Processor
Polymer Brush Data Processor
 
Flow Trajectory Approach for Human Action Recognition
Flow Trajectory Approach for Human Action RecognitionFlow Trajectory Approach for Human Action Recognition
Flow Trajectory Approach for Human Action Recognition
 
Foreground algorithms for detection and extraction of an object in multimedia...
Foreground algorithms for detection and extraction of an object in multimedia...Foreground algorithms for detection and extraction of an object in multimedia...
Foreground algorithms for detection and extraction of an object in multimedia...
 
Kk3517971799
Kk3517971799Kk3517971799
Kk3517971799
 
GIS 5103 – Fundamentals of GISLecture 83D GIS.docx
GIS 5103 – Fundamentals of GISLecture 83D GIS.docxGIS 5103 – Fundamentals of GISLecture 83D GIS.docx
GIS 5103 – Fundamentals of GISLecture 83D GIS.docx
 
Point cloud mesh-investigation_report-lihang
Point cloud mesh-investigation_report-lihangPoint cloud mesh-investigation_report-lihang
Point cloud mesh-investigation_report-lihang
 
Log polar coordinates
Log polar coordinatesLog polar coordinates
Log polar coordinates
 
The next generation of the Montage image mosaic engine
The next generation of the Montage image mosaic engineThe next generation of the Montage image mosaic engine
The next generation of the Montage image mosaic engine
 
Computer graphics
Computer graphics Computer graphics
Computer graphics
 
Developing AIR for Android with Flash Professional CS5
Developing AIR for Android with Flash Professional CS5Developing AIR for Android with Flash Professional CS5
Developing AIR for Android with Flash Professional CS5
 
COSC 426 Lect. 3 -AR Developer Tools
COSC 426 Lect. 3 -AR Developer ToolsCOSC 426 Lect. 3 -AR Developer Tools
COSC 426 Lect. 3 -AR Developer Tools
 
IRJET- Real Time Implementation of Bi-Histogram Equalization Method on Androi...
IRJET- Real Time Implementation of Bi-Histogram Equalization Method on Androi...IRJET- Real Time Implementation of Bi-Histogram Equalization Method on Androi...
IRJET- Real Time Implementation of Bi-Histogram Equalization Method on Androi...
 
IRJET- Design and Implementation of ATM Security System using Vibration Senso...
IRJET- Design and Implementation of ATM Security System using Vibration Senso...IRJET- Design and Implementation of ATM Security System using Vibration Senso...
IRJET- Design and Implementation of ATM Security System using Vibration Senso...
 
IRJET-Reversible Image Watermarking Based on Histogram Shifting Technique
IRJET-Reversible Image Watermarking Based on Histogram Shifting TechniqueIRJET-Reversible Image Watermarking Based on Histogram Shifting Technique
IRJET-Reversible Image Watermarking Based on Histogram Shifting Technique
 
Reversible Image Watermarking Based on Histogram Shifting Technique
Reversible Image Watermarking Based on Histogram Shifting TechniqueReversible Image Watermarking Based on Histogram Shifting Technique
Reversible Image Watermarking Based on Histogram Shifting Technique
 
Parameter study bonn
Parameter study bonnParameter study bonn
Parameter study bonn
 
Final Design Project - Memo (with GUI)
Final Design Project - Memo (with GUI)Final Design Project - Memo (with GUI)
Final Design Project - Memo (with GUI)
 

More from Industrial Technology Research Institute (ITRI)(工業技術研究院, 工研院)

More from Industrial Technology Research Institute (ITRI)(工業技術研究院, 工研院) (20)

What is the world where you can make your own semiconductors?
What is the world where you can make your own semiconductors?What is the world where you can make your own semiconductors?
What is the world where you can make your own semiconductors?
 
半導体製造(TinyTapeout)に挑戦しよう!
半導体製造(TinyTapeout)に挑戦しよう!半導体製造(TinyTapeout)に挑戦しよう!
半導体製造(TinyTapeout)に挑戦しよう!
 
Introduction of ISHI-KAI with OpenMPW
Introduction of ISHI-KAI with OpenMPWIntroduction of ISHI-KAI with OpenMPW
Introduction of ISHI-KAI with OpenMPW
 
Kernel/VMレイヤーを自分色に染める!By ISHI会
Kernel/VMレイヤーを自分色に染める!By ISHI会Kernel/VMレイヤーを自分色に染める!By ISHI会
Kernel/VMレイヤーを自分色に染める!By ISHI会
 
Principle Representation of The 8 Qubits Quantum Computer by RaspberryPi
Principle Representation of The 8 Qubits Quantum Computer by RaspberryPiPrinciple Representation of The 8 Qubits Quantum Computer by RaspberryPi
Principle Representation of The 8 Qubits Quantum Computer by RaspberryPi
 
Microwaveguquantum
MicrowaveguquantumMicrowaveguquantum
Microwaveguquantum
 
The easiest way of setup QuTiP on Windows
The easiest way of setup QuTiP on WindowsThe easiest way of setup QuTiP on Windows
The easiest way of setup QuTiP on Windows
 
GNU Radio Study for Super beginner
GNU Radio Study for Super beginnerGNU Radio Study for Super beginner
GNU Radio Study for Super beginner
 
The Self-Contained SDR Satellite Grand Station with Raspberry Pi 3
The Self-Contained SDR Satellite Grand Station with Raspberry Pi 3The Self-Contained SDR Satellite Grand Station with Raspberry Pi 3
The Self-Contained SDR Satellite Grand Station with Raspberry Pi 3
 
Self‐Contained SDR Grand Station with Raspberry Pi 3
Self‐Contained SDR Grand Station with Raspberry Pi 3Self‐Contained SDR Grand Station with Raspberry Pi 3
Self‐Contained SDR Grand Station with Raspberry Pi 3
 
衛星追尾用パラボラアンテナ建設記
衛星追尾用パラボラアンテナ建設記衛星追尾用パラボラアンテナ建設記
衛星追尾用パラボラアンテナ建設記
 
All list of the measuring machines for microwave
All list of the measuring machines for microwaveAll list of the measuring machines for microwave
All list of the measuring machines for microwave
 
5000円で誰でも作れる新世代衛星地上局
5000円で誰でも作れる新世代衛星地上局5000円で誰でも作れる新世代衛星地上局
5000円で誰でも作れる新世代衛星地上局
 
How to setup mastodon in chinese
How to setup mastodon in chineseHow to setup mastodon in chinese
How to setup mastodon in chinese
 
Radiation Test -Raspberry PI Zero-
Radiation Test -Raspberry PI Zero-Radiation Test -Raspberry PI Zero-
Radiation Test -Raspberry PI Zero-
 
將DNA在廚房抽出的程序
將DNA在廚房抽出的程序將DNA在廚房抽出的程序
將DNA在廚房抽出的程序
 
Protocol of the DNA Extraction in Kitchen
Protocol of the DNA Extraction in KitchenProtocol of the DNA Extraction in Kitchen
Protocol of the DNA Extraction in Kitchen
 
3D Printed Google Cardboard for workshop
3D Printed Google Cardboard for workshop3D Printed Google Cardboard for workshop
3D Printed Google Cardboard for workshop
 
計算機(物理)
計算機(物理)計算機(物理)
計算機(物理)
 
How to Make a Scanning Drone in Chinese
How to Make a Scanning Drone in ChineseHow to Make a Scanning Drone in Chinese
How to Make a Scanning Drone in Chinese
 

Recently uploaded

"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr LapshynFwdays
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
Key Features Of Token Development (1).pptx
Key  Features Of Token  Development (1).pptxKey  Features Of Token  Development (1).pptx
Key Features Of Token Development (1).pptxLBM Solutions
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
 
Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024Neo4j
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Allon Mureinik
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxOnBoard
 
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphSIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphNeo4j
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machinePadma Pradeep
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Alan Dix
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhisoniya singh
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsMemoori
 
Artificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning eraArtificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning eraDeakin University
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...Fwdays
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitecturePixlogix Infotech
 
APIForce Zurich 5 April Automation LPDG
APIForce Zurich 5 April  Automation LPDGAPIForce Zurich 5 April  Automation LPDG
APIForce Zurich 5 April Automation LPDGMarianaLemus7
 

Recently uploaded (20)

"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
Key Features Of Token Development (1).pptx
Key  Features Of Token  Development (1).pptxKey  Features Of Token  Development (1).pptx
Key Features Of Token Development (1).pptx
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
 
The transition to renewables in India.pdf
The transition to renewables in India.pdfThe transition to renewables in India.pdf
The transition to renewables in India.pdf
 
Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping Elbows
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptx
 
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphSIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machine
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial Buildings
 
Artificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning eraArtificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning era
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC Architecture
 
APIForce Zurich 5 April Automation LPDG
APIForce Zurich 5 April  Automation LPDGAPIForce Zurich 5 April  Automation LPDG
APIForce Zurich 5 April Automation LPDG
 

How to Make Hand Detector on Native Activity with OpenCV

  • 1. How to Make Hand Detector on Native Activity with OpenCV Noritsuna Imamura noritsuna@siprop.org ©SIProp Project, 2006-2008 1
  • 2. Agenda Preparing Benchmark How to Load Files on NativeActivity How to Make Hand Detector Calculate Histgram of Skin Color Detect Skin Area from CapImage Calculate the Largest Skin Area Matching Histgrams ©SIProp Project, 2006-2008 2
  • 4. Chart of Hand Detector Calc Histgram of Skin Color Detect Skin Area from CapImage Calc the Largest Skin Area Matching Histgrams ©SIProp Project, 2006-2008 4
  • 5. Chart of Hand Detector Calc Histgram of Skin Color Histgram Detect Skin Area from CapImage Convex Hull Calc the Largest Skin Area Labeling Matching Histgrams Feature Point Distance ©SIProp Project, 2006-2008 5
  • 6. Mat vs IplImage Benchmark ©SIProp Project, 2006-2008 6
  • 7. About Mat & IplImage cv::Mat IplImage Version 2.x and Upper Written by C++ Version 1.x and Upper Written by C Advantage Advantage Easy to Use Faster 1. 2. 3. 4. 5. 6. 7. 8. 9. cv::Mat_<cv::Vec3b> img; for (int r = 0; r < img.rows; r++ ) { for(int c = 0; c < img.cols; c++ ) { cv::Vec3b &v = img.at<cv::Vec3b>(r,c); v[0] = 0;//B v[1] = 0;//G v[2] = 0;//R } } Many Documents 1. 2. 3. 4. 5. 6. 7. 8. IplImage* img; for(int h = 0; h < img->height; h++) { for(int w = 0; w < img->width; w++){ img->imageData[img>widthStep * h + w * 3 + 0]=0;//B img->imageData[img>widthStep * h + w * 3 + 1]=0;//G img->imageData[img>widthStep * h + w * 3 + 2]=0;//R } 7 } ©SIProp Project, 2006-2008
  • 8. Benchmark on Android Gray Scale Download Here: http://github.com/noritsuna/MatIplBenchmark ©SIProp Project, 2006-2008 8
  • 9. How to Load File on NativeActivity ©SIProp Project, 2006-2008 9
  • 10. AssetManager “assets” dir is your resource file dir on Android “res”(resource) dir is also same. But the file that is there is made “Resource ID” by R file. Ex. I18n How to Use NDK with Java AAssetManager Class (C++) NativeActivity AssetManager4NativeActivity by me http://github.com/noritsuna/AssetManager4NativeActivity ©SIProp Project, 2006-2008 10
  • 12. AssetManager4NativeActivity assetmanager.h int setupAsset(const char *package_name); Copy "assets" directory from APK file to under "/data/data/[Package Name]" directory. int loadAseetFile(const char *package_name, const char *load_file_name); Copy File of "load_file_name" from APK file to under "/data/data/[Package Name]/assets" directory. 1. 2. 3. createAssetFile("assets/images/skincolorsample.jpg"); sprintf(file_path, "%s/%s/%s", “/data/data”, PACKAGE_NAME, "assets/images/skincolorsample.jpg"); skin_color_sample = cvLoadImage(file_path); ©SIProp Project, 2006-2008 12
  • 13. How to Make Hand Detector ©SIProp Project, 2006-2008 13
  • 14. Hand Detector Sample Source Code: http://github.com/noritsuna/HandDetector ©SIProp Project, 2006-2008 14
  • 15. Chart of Hand Detector Calc Histgram of Skin Color Detect Skin Area from CapImage Calc the Largest Skin Area Matching Histgrams ©SIProp Project, 2006-2008 15
  • 16. Chart of Hand Detector Calc Histgram of Skin Color Histgram Detect Skin Area from CapImage Convex Hull Calc the Largest Skin Area Labeling Matching Histgrams Feature Point Distance ©SIProp Project, 2006-2008 16
  • 17. Calculate Histgram of Skin Color ©SIProp Project, 2006-2008 17
  • 18. What’s Histgram? Frequency Distribution Chart. Why Use it? For Checking Skin Color. Each people’s Skin Color is NOT same. One of Leveling algorithm. ©SIProp Project, 2006-2008 18
  • 19. Step 1/2 Convert RGB to HSV RGB color is changed by Light Color. Hue Saturation/Chroma Value/Lightness/Brightness 1. cvCvtColor( src, hsv, CV_BGR2HSV ); 2. IplImage* h_plane IPL_DEPTH_8U, 1 IplImage* s_plane IPL_DEPTH_8U, 1 IplImage* v_plane IPL_DEPTH_8U, 1 3. 4. = cvCreateImage( size, ); = cvCreateImage( size, ); = cvCreateImage( size, ); ©SIProp Project, 2006-2008 19
  • 20. Step 2/2 cvCreateHist(); Prameter Dimension of Histgram Size Type Range of limit Over limit Use or Not 1. 2. 3. 4. 5. 6. 7. 8. IplImage* planes[] = { h_plane, s_plane }; *hist = cvCreateHist(2, hist_size, CV_HIST_ARRAY, ranges, 1); cvCalcHist( planes, *hist, 0, 0 ); cvMinMaxLoc(v_plane, vmin, vmax); ©SIProp Project, 2006-2008 20
  • 21. Detect Skin Area from CapImage ©SIProp Project, 2006-2008 21
  • 22. How to Get Skin Area? Use “Convex Hull” algorithm 1. 2. 3. 4. 5. Check Image From Left-Top. Found Black Color Pixel is Start Point. Search Black Pixel by Right Image. Go to Black Pixel that First Found, this is next point. Do 2-4 again, if back to Start Point, get Convex Hull. ※Convert to Black-White Image Image Source: http://homepage2.nifty.com/tsugu/sotuken/ronbun/sec3-2.html#0013 ©SIProp Project, 2006-2008 22
  • 23. Step 1/3 Delete V(Lightness/Brightness) Color 1. Calculate Back Project Image by Skin Color Histgram. 2. Threshold by V(Lightness/Brightness) Color. 3. And Operation between Mask and Back Project. 4. Threshold to Back Project. (Adjustment) 1. cvCalcBackProject(planes, backProjectImage, hist); 2. cvThreshold(v_plane, maskImage, *v_min, *v_max, CV_THRESH_BINARY); cvAnd(backProjectImage, maskImage, backProjectImage); 3. 4. cvThreshold(backProjectImage, dstImage, 10, 255, CV_THRESH_BINARY); ©SIProp Project, 2006-2008 23
  • 24. Step 2/3 Noise Reduction 1. Erode (scale-down) 2. Dilate (scale-up) 1/4 1. 2. cvErode(dstImage, dstImage, NULL, 1); cvDilate(dstImage, dstImage, NULL, 1); ©SIProp Project, 2006-2008 24
  • 25. Step 3/3 Convex Hull cvFindContours(); Source Image Convex that is detected First Convex Pointer that detected 1. cvFindContours(dstImage, storage, &contours); ©SIProp Project, 2006-2008 25
  • 26. Calculate the Largest Skin Area ©SIProp Project, 2006-2008 26
  • 27. What’s Labeling? Labeling Area Marking Algorithm. 4-Connection 8-Connection Image Source: http://imagingsolution.blog107.fc2.com/blog-entry-193.html ©SIProp Project, 2006-2008 27
  • 28. Labeling Algorithm 1/4 1, Scan Image by Raster 2, If you got a White Pixel, 1, Check Right Image Pixels 2, All “0”, Put the Latest Number + 1 in Pixel ©SIProp Project, 2006-2008 28
  • 29. Labeling Algorithm 2/4 1, If you got a White Pixel, 1, Check Right Image Orange Pixels 2, Not “0”, The Lowest Orange Pixels Number in Pixel ©SIProp Project, 2006-2008 29
  • 30. Labeling Algorithm 3/4 1, If got 2 more Number in Orange Pixeles, 1, Put The Lowest Number in Pixel, Change Other Numbers’ “Look up table” to The Lowest Number. ©SIProp Project, 2006-2008 30
  • 31. Labeling Algorithm 4/4 1, After finish, Check “Look up Table”. 1, If Dst is NOT Serial Number, Change to Serial Number 2, Src is changed Dst Number. ©SIProp Project, 2006-2008 31
  • 32. Get Area Size cvContourArea(); 1. 2. 3. 4. 5. 6. 7. for (CvSeq* c= contours; c != NULL; c = c->h_next){ double area = abs(cvContourArea(c, CV_WHOLE_SEQ)); if (maxArea < area) { maxArea = area; hand_ptr = c; } } ©SIProp Project, 2006-2008 32
  • 34. Matching Histgrams Histgram of Oriented Gradients (HoG) Split Some Area, And Calc Histgram of each Area. ©SIProp Project, 2006-2008 34
  • 35. Why Use HoG? Matching Hand Shape. Use Feature Point Distance with Each HoG. ©SIProp Project, 2006-2008 35
  • 36. Step 1/3 Calculate each Cell (Block(3x3) with Edge Pixel(5x5)) luminance gradient moment luminance gradient degree=deg 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. for(int y=0; y<height; y++){ for(int x=0; x<width; x++){ if(x==0 || y==0 || x==width-1 || y==height-1){ continue; } double dx = img->imageData[y*img>widthStep+(x+1)] - img->imageData[y*img->widthStep+(x-1)]; double dy = img->imageData[(y+1)*img>widthStep+x] - img->imageData[(y-1)*img->widthStep+x]; double m = sqrt(dx*dx+dy*dy); double deg = (atan2(dy, dx)+CV_PI) * 180.0 / CV_PI; int bin = CELL_BIN * deg/360.0; if(bin < 0) bin=0; if(bin >= CELL_BIN) bin = CELL_BIN-1; hist[(int)(x/CELL_X)][(int)(y/CELL_Y)][bin] += m; } } ©SIProp Project, 2006-2008 36
  • 37. Step 2/3 Calculate Feature Vector of Each Block (Go to Next Page) 1. 2. for(int y=0; y<BLOCK_HEIGHT; y++){ for(int x=0; x<BLOCK_WIDTH; x++){ 3. 4. 5. 6. 7. 8. 9. //Calculate Feature Vector in Block double vec[BLOCK_DIM]; memset(vec, 0, BLOCK_DIM*sizeof(double)); for(int j=0; j<BLOCK_Y; j++){ for(int i=0; i<BLOCK_X; i++){ for(int d=0; d<CELL_BIN; d++){ int index = j*(BLOCK_X*CELL_BIN) + i*CELL_BIN + d; vec[index] = hist[x+i][y+j][d]; } } } 10. 11. 12. 13. ©SIProp Project, 2006-2008 37
  • 38. Step 3/3 (Continued) Normalize Vector Set Feature Vector 1. 2. 3. 4. 5. 6. 7. 8. //Normalization of Vector double norm = 0.0; for(int i=0; i<BLOCK_DIM; i++){ norm += vec[i]*vec[i]; } for(int i=0; i<BLOCK_DIM; i++){ vec[i] /= sqrt(norm + 1.0); } 9. 10. 11. //Put feat for(int i=0; i<BLOCK_DIM; i++){ int index = y*BLOCK_WIDTH*BLOCK_DIM + x*BLOCK_DIM + i; 12. 13. 14. 15. feat[index] = vec[i]; } } } ©SIProp Project, 2006-2008 38
  • 39. How to Calc Approximation Calc HoG Distance of each block Get Average. ©SIProp Project, 2006-2008 39
  • 40. Step 1/1 Calulate Feature Point Distance 1. 2. 3. 4. 5. double dist = 0.0; for(int i = 0; i < TOTAL_DIM; i++){ dist += fabs(feat1[i] - feat2[i])*fabs(feat1[i] - feat2[i]); } return sqrt(dist); ©SIProp Project, 2006-2008 40