SlideShare a Scribd company logo
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 Snapshotter
Kohei 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 Pulling
Kohei 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 Distribution
Kohei 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 Processing
Yoshifumi 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 Microservices
Chris Bailey
 
DEEP: a user success story
DEEP: a user success storyDEEP: a user success story
DEEP: a user success story
EOSC-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 Kernel
Anne 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 golang
Ting-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 Algorithms
IRJET Journal
 
426 lecture 4: AR Developer Tools
426 lecture 4: AR Developer Tools426 lecture 4: AR Developer Tools
426 lecture 4: AR Developer Tools
Mark Billinghurst
 
Intro to computer vision in .net
Intro to computer vision in .netIntro to computer vision in .net
Intro to computer vision in .net
Stephen 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 Recognition
IRJET 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
 
Kk3517971799
Kk3517971799Kk3517971799
Kk3517971799
IJERA Editor
 
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
shericehewat
 
Point cloud mesh-investigation_report-lihang
Point cloud mesh-investigation_report-lihangPoint cloud mesh-investigation_report-lihang
Point cloud mesh-investigation_report-lihang
Lihang Li
 
Log polar coordinates
Log polar coordinatesLog polar coordinates
Log polar coordinates
Oğul Göçmen
 
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
G. 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 CS5
Chris Griffith
 
Seismic Hazard Assessment Software in Python by Prof. Dr. Costas Sachpazis
Seismic Hazard Assessment Software in Python by Prof. Dr. Costas SachpazisSeismic Hazard Assessment Software in Python by Prof. Dr. Costas Sachpazis
Seismic Hazard Assessment Software in Python by Prof. Dr. Costas Sachpazis
Dr.Costas Sachpazis
 
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
Mark 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 Technique
IRJET 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 Technique
IRJET Journal
 
Parameter study bonn
Parameter study bonnParameter study bonn
Parameter study bonn
Gabriel Stöckle
 

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
 
Seismic Hazard Assessment Software in Python by Prof. Dr. Costas Sachpazis
Seismic Hazard Assessment Software in Python by Prof. Dr. Costas SachpazisSeismic Hazard Assessment Software in Python by Prof. Dr. Costas Sachpazis
Seismic Hazard Assessment Software in Python by Prof. Dr. Costas Sachpazis
 
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
 

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

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?
Industrial Technology Research Institute (ITRI)(工業技術研究院, 工研院)
 
半導体製造(TinyTapeout)に挑戦しよう!
半導体製造(TinyTapeout)に挑戦しよう!半導体製造(TinyTapeout)に挑戦しよう!
Introduction of ISHI-KAI with OpenMPW
Introduction of ISHI-KAI with OpenMPWIntroduction of ISHI-KAI with OpenMPW
Kernel/VMレイヤーを自分色に染める!By ISHI会
Kernel/VMレイヤーを自分色に染める!By ISHI会Kernel/VMレイヤーを自分色に染める!By ISHI会
Kernel/VMレイヤーを自分色に染める!By ISHI会
Industrial Technology Research Institute (ITRI)(工業技術研究院, 工研院)
 
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
Industrial Technology Research Institute (ITRI)(工業技術研究院, 工研院)
 
The easiest way of setup QuTiP on Windows
The easiest way of setup QuTiP on WindowsThe easiest way of setup QuTiP on Windows
GNU Radio Study for Super beginner
GNU Radio Study for Super beginnerGNU 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
Industrial Technology Research Institute (ITRI)(工業技術研究院, 工研院)
 
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
Industrial Technology Research Institute (ITRI)(工業技術研究院, 工研院)
 
衛星追尾用パラボラアンテナ建設記
衛星追尾用パラボラアンテナ建設記衛星追尾用パラボラアンテナ建設記
All list of the measuring machines for microwave
All list of the measuring machines for microwaveAll list of the measuring machines for microwave
5000円で誰でも作れる新世代衛星地上局
5000円で誰でも作れる新世代衛星地上局5000円で誰でも作れる新世代衛星地上局
5000円で誰でも作れる新世代衛星地上局
Industrial Technology Research Institute (ITRI)(工業技術研究院, 工研院)
 
Radiation Test -Raspberry PI Zero-
Radiation Test -Raspberry PI Zero-Radiation Test -Raspberry PI Zero-
將DNA在廚房抽出的程序
將DNA在廚房抽出的程序將DNA在廚房抽出的程序
Protocol of the DNA Extraction in Kitchen
Protocol of the DNA Extraction in KitchenProtocol of the DNA Extraction in Kitchen
3D Printed Google Cardboard for workshop
3D Printed Google Cardboard for workshop3D 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

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

JMeter webinar - integration with InfluxDB and Grafana
JMeter webinar - integration with InfluxDB and GrafanaJMeter webinar - integration with InfluxDB and Grafana
JMeter webinar - integration with InfluxDB and Grafana
RTTS
 
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdfFIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance
 
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
Product School
 
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
BookNet Canada
 
Knowledge engineering: from people to machines and back
Knowledge engineering: from people to machines and backKnowledge engineering: from people to machines and back
Knowledge engineering: from people to machines and back
Elena Simperl
 
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdfFIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance
 
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
Jeffrey Haguewood
 
Epistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI supportEpistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI support
Alan Dix
 
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Thierry Lestable
 
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
Product School
 
UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3
DianaGray10
 
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
Product School
 
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
James Anderson
 
Generating a custom Ruby SDK for your web service or Rails API using Smithy
Generating a custom Ruby SDK for your web service or Rails API using SmithyGenerating a custom Ruby SDK for your web service or Rails API using Smithy
Generating a custom Ruby SDK for your web service or Rails API using Smithy
g2nightmarescribd
 
How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...
Product School
 
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered QualitySoftware Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Inflectra
 
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Ramesh Iyer
 
Elevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object CalisthenicsElevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object Calisthenics
Dorra BARTAGUIZ
 
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
Sri Ambati
 
Monitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR EventsMonitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR Events
Ana-Maria Mihalceanu
 

Recently uploaded (20)

JMeter webinar - integration with InfluxDB and Grafana
JMeter webinar - integration with InfluxDB and GrafanaJMeter webinar - integration with InfluxDB and Grafana
JMeter webinar - integration with InfluxDB and Grafana
 
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdfFIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
 
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
 
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
 
Knowledge engineering: from people to machines and back
Knowledge engineering: from people to machines and backKnowledge engineering: from people to machines and back
Knowledge engineering: from people to machines and back
 
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdfFIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
 
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
 
Epistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI supportEpistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI support
 
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
 
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
 
UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3
 
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
 
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
 
Generating a custom Ruby SDK for your web service or Rails API using Smithy
Generating a custom Ruby SDK for your web service or Rails API using SmithyGenerating a custom Ruby SDK for your web service or Rails API using Smithy
Generating a custom Ruby SDK for your web service or Rails API using Smithy
 
How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...
 
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered QualitySoftware Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
 
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
 
Elevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object CalisthenicsElevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object Calisthenics
 
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
 
Monitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR EventsMonitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR Events
 

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