Chương trình được phát triển trên nền tảng Microsoft .NET và phân tách thành các module riêng rẽ sau:
3.2.2.1. Module tiền xử lý
Ảnh đầu vào của toàn hệ thống là ảnh màu, tuy nhiên để làm giảm bớt độ phức tạp tính toán của ảnh đầu vào của mạng nơ-ron, tập các ảnh huấn luyện mạng nơ-ron đều là các ảnh mức xám. Tập các ảnh để huấn luyện mạng được xử lý (tiền xử lý) để nâng cao chất lượng độ tương phản của ảnh, độ sáng của ảnh, làm giảm hiểu ứng nhiễu, co giãn ảnh.
Với chức năng lọc nhiễu, tăng độ tương phản, tăng độ sáng ta sử dụng thư viện Aforge:
using AForge;
using AForge.Imaging;
using AForge.Imaging.Filters;
privateBitmap ApplyFilter( IFilter filter ) {
ClearCurrentImage( ); // apply filter filteredImage = filter.Apply(sourceImage); return filteredImage } • Lọc nhiễu
ApplyFilter( newContrastCorrection( ) ); • Tăngđộ tương phản
ApplyFilter( newContrastCorrection( ) ); • Tăng độ sáng
ApplyFilter( newBrightnessCorrection( ) );
• Co giãn ảnh
Các ảnh đầu vào với các cỡ khác nhau được co giãn về ảnh có kích thước xác định
publicstaticBitmap Scale(Bitmap Input, int newHeight, int newWidth)
{
double HRate = (double)Input.Height / newHeight;
double WRate = (double)Input.Width / newWidth;
Bitmap Result = newBitmap(newWidth, newHeight);
for (int i = 0; i < newHeight; i++) {
for (int j = 0; j < newWidth; j++) {
int x = (int)((double)j * WRate);
int y = (int)((double)i * HRate);
Result.SetPixel(j, i, Input.GetPixel(x, y)); }
}
return Result; }
3.2.2.2. Module trích chọn đặc trưng
Module này sẽ trích chọn các điểm da trong ảnh sau đó sẽ trích ra phần cần thiết cho quá trình nhận dạng.
Bước 1: Module thành phần phát hiện các điểm da trong ảnh với Histogram
Trong cách tiếp cận này, các lược đồ histogram được sử dụng để thể hiện mật độ trong không gian màu. Điều kiện rọi sáng đặc biệt trong các ảnh thường không biết trước và được ghi lại dưới các điều kiện khác nhau. Tuy nhiên, với một số lượng lớn
dữ liệu điểm ảnh đào tạo được gán nhãn bao gồm tất cả các loại da người (Châu Á, Châu Âu, Châu Phi), vẫn có thể mô hình phân phối của các màu sắc da và không phải da trong không gian màu.
Cách tiếp cận này dựa trên histogram để phân vùng màu da. Không gian màu được lượng tử hóa thành dãy các ô, mỗi ô tương ứng với một dải màu. Mỗi ô sẽ lưu số lần các màu tương ứng có trong tập các ảnh đào tạo có chứa da. Sau quá trình đào tạo, histogram được chuẩn hóa (normalized)- chuyển các giá trị của histogram thành các phân phối xác suất rời rạc:
Để giảm số lượng không gian lưu trữ, các kỹ thuật lấy mẫu thô không gian màu thường được sử dụng. Hệ thống sử dụng cách lấy mẫu 32×32×32 dựa theo phân tích của Jones, Rehg. Trong đó skin[c] là giá trị của ô trong histogram tưong ứng với vector màu c. Norm là tổng giá trị của tất cả các ô (Jones, Rehg 1999). Histogram sử dụng được xây dựng từ hơn 1 tỷ điểm ảnh được đánh giá bởi Jones, Rehg.
Các giá trị sau khi chuẩn hóa của các ô tạo nên các xác suất trước
Các giá trị Pskin(c) thực sự là một xác suất có điều kiện P(c|skin) – xác suất quan sát thấy màu c, khi chúng ta thấy một điểm màu da.
) ( ) | ( ) ( ) | ( ) ( ) | ( ) | ( skin P skin c P skin P skin c P skin P skin c P c skin P ¬ ¬ + = ) | (skin c
P và P(skin|¬c)được tính trực tiếp từ các lược đồ màu da và không phải da
Các xác suất trướcP(skin) và P(¬skin)có thể được ước lượng từ số mẫu là da và không phải là da trong tập mẫu đào tạo.
Có thể tránh phải tính toàn bộ biểu thức trên bằng cách chỉ cần so sánh P(skin|c) và P(¬skin|c) ) ( ) | ( ) ( ) | ( ) | ( ) | ( skin P skin c P skin P skin c P c skin P c skin P ¬ ¬ = ¬
So sánh biểu thức trên với ngưỡng sẽ tạo ra luật quyết định: Θ > ¬ ) | ( ) | ( skin c P skin c P
không phải là da.
Hình 3.2: Hình trái là ảnhđầu vào, Hình phải là ảnh sau quá trình phát hiện da
Kết quả ra của quá trình phát hiện da là một bản đồ da đa mức xám, mức độ xám chỉ độ mức độ tin tưởng điểm ảnh đó là da. Bước tiếp theo là phân loại ảnh dựa theo hình dáng của vùng da.
Bước 2: Trích chọn thuộc tính dựa trên cửa sổ trượt
Nguyên tắc tìm kiếm bộ phận “đen” (chẳng hạn vòng 1 “đen”) trong ảnh được thực hiện bằng quét một cửa sổ có kích thước cố định bằng trung bình chiều dài ×
trung bình chiều cao của các mẫu (pattern) trên ảnh đầu vào. Tại mỗi vị trí, cửa sổ đó
sẽ được đánh giá là bộ phận “đen” hay không dựa trên kết quả đầu ra của mạng nơ- ron. Một ảnh đầu vào được biểu diễn và xử lý đa phân giải với tỷ lệ kích thước giữa các ảnh được lựa chọn là 1:2.
Quá trình tìm kiếm vét cạn toàn bộ (full search) trên mặt phẳng ảnh sẽ tốn rất nhiều thời gian và gặp khó khăn đối với yêu cầu giảm thời gian này.
Mục tiêu đặt ra là phải giảm thời gian tìm kiếm. Tác giả đề nghị một giải pháp là việc tìm tiếm chỉ thực hiện trên vùng da đã được phân vùng ảnh, sẽ không tìm trên vùng không-màu da. Như vậy khối phân tách màu da với thuật toán đã trình bày ở trên được tích hợp vào hệ thống phát hiện bộ phận “đen” cho quá trình phân tích tìm kiếm các bộ phận “đen” trong ảnh vào. Giải pháp này cho phép tăng tốc độ tìm kiếm đáng kể.
Hình3.3: Ảnh được trích chọn đặc trưng 3.2.2.3. Module huấn luyện mạng nơ-ron
trung bình chiều cao, thường lân cận 1000 pixels.
Lựa chọn kiến trúc mạng đa lớp (Multilayer Peceptron - MLP) với giải thuật học lan truyền. Để có thể tạo mô hình học tốt, các yêu cầu theo tiêu chí dưới đây được đề nghị:
• Đối với các ảnh không có bộ phận “đen” có thể là bất cứ ảnh gì không phải bộ phận nhưng càng mô tả nhiều các ảnh thường gặp. Dùng các ảnh là một phần của bộ phận càng tốt.
• Các ảnh có chứa bộ phận “đen” được càng nhiều thay đổi của bộ phận “đen” càng tốt, khi đó khả năng nhận dạng càng cao.
Để giải quyết tốt yêu cầu thứ hai, tác giả đề nghị một giải pháp là tạo ra các ảnh mới từ tập các ảnh học ban đầu bằng cách xoay ảnh những góc thích hợp cũng như đối xứng trái-phải.
Quá trình huấn luyện mạng được diễn ra như sau: • Đưa nơ-ron đầu vào vào lớp
• Tính toán giá trị đầu vào
• Tính toán kết quả đầu ra với giá trị đầu ra mong muốn với giá trị đầu vào. Quá trình này gọi là xác định lỗi.
• Thay đổi trọng số của nơ-ron dựa trên các lỗi trước.
• Lặp lại quá trình này cho đến khi đạt đến lỗi ít nhất mà có thể chấp nhận được (ví dụ, error < 1.1), tức là mạng nơ-ron được huấn luyện thành công hay đạt đến tối đa quá trình lặp, tức là quá trình huấn luyện mạng nơ-ron không thành công.
Quá trình huấn luyện được cài đặt như sau:
public bool Train() {
double currentError = 0; int currentIteration = 0;
NeuralEventArgs Args = new NeuralEventArgs() ; do
{
currentError = 0;
foreach (KeyValuePair<T, double[]> p in TrainingSet) {
NeuralNet.ForwardPropagate(p.Value, p.Key); NeuralNet.BackPropagate();
currentError += NeuralNet.GetError(); }
currentIteration++;
if (IterationChanged != null && currentIteration % 5 == 0) {
Args.CurrentError = currentError;
Args.CurrentIteration = currentIteration; IterationChanged(this, Args);
}
} while (currentError > maximumError && currentIteration < maximumIteration && !Args.Stop);
if (IterationChanged != null) { Args.CurrentError = currentError; Args.CurrentIteration = currentIteration; IterationChanged(this, Args); }
if (currentIteration >= maximumIteration || Args.Stop) return false; //Huan luyen loi
return true; }
Trong đó hàmForwardPropagate()và BackPropagate()được cài đặt cụ thể như sau:
// Ham lan truyen xuoi
publicvoid ForwardPropagate(double[] pattern, T output) {
int i, j;
double total;
//Apply input cho mang
for (i = 0; i < PreInputNum; i++) {
PreInputLayer[i].Value = pattern[i]; }
//Tinh Inputs va Outputs cho lop Input
for (i = 0; i < InputNum; i++) {
for (j = 0; j < PreInputNum; j++) {
total += PreInputLayer[j].Value * PreInputLayer[j].Weights[i];
}
InputLayer[i].InputSum = total; InputLayer[i].Output = F(total); }
//Tinh Inputs va Outputs cho lop Hidden
for (i = 0; i < HiddenNum; i++) {
total = 0.0;
for (j = 0; j < InputNum; j++) {
total += InputLayer[j].Output * InputLayer[j].Weights[i];
}
HiddenLayer[i].InputSum = total; HiddenLayer[i].Output = F(total); }
//Tinh Inputs, Outputs, Targets, Errors cua lop Ouput
for (i = 0; i < OutputNum; i++) {
total = 0.0;
for (j = 0; j < HiddenNum; j++) {
total += HiddenLayer[j].Output * HiddenLayer[j].Weights[i];
} OutputLayer[i].InputSum = total; OutputLayer[i].output = F(total); OutputLayer[i].Target = OutputLayer[i].Value.CompareTo(output) == 0 ? 1.0 : 0.0; OutputLayer[i].Error = (OutputLayer[i].Target - OutputLayer[i].output) * (OutputLayer[i].output) * (1 - OutputLayer[i].output); } }
// Ham truyen nguoc de cap nhat trong so (weight)
publicvoid BackPropagate() {
int i, j;
double total;
//Fix Error tang Hidden
for (i = 0; i < HiddenNum; i++) {
total = 0.0;
for (j = 0; j < OutputNum; j++) {
total += HiddenLayer[i].Weights[j] * OutputLayer[j].Error;
}
HiddenLayer[i].Error = total; }
//Fix Error tang Layer
for (i = 0; i < InputNum; i++) {
total = 0.0;
for (j = 0; j < HiddenNum; j++) {
total += InputLayer[i].Weights[j] * HiddenLayer[j].Error;
}
InputLayer[i].Error = total; }
// Cap nhat trong so lop dau tien
for (i = 0; i < InputNum; i++) {
for (j = 0; j < PreInputNum; j++) {
PreInputLayer[j].Weights[i] +=
learningRate * InputLayer[i].Error * PreInputLayer[j].Value; }
}
//Cap nhat trong so lop thu 2
for (i = 0; i < HiddenNum; i++) {
for (j = 0; j < InputNum; j++) {
InputLayer[j].Weights[i] +=
learningRate * HiddenLayer[i].Error * InputLayer[j].Output; }
}
//Cap nhat tron so lop thu 3
for (i = 0; i < OutputNum; i++) {
for (j = 0; j < HiddenNum; j++) {
HiddenLayer[j].Weights[i] +=
learningRate * OutputLayer[i].Error * HiddenLayer[j].Output; }
} }
3.2.2.4. Module nhận dạng và ra quyết định
Với ảnh đầu vào cần nhận dạng, sau khi dùng tiền xử lý, trích chọn đặc trưng cần thiết đem so sánh với các mẫu đã huấn luyện để rút ra mẫu trùng nhất (tính theo phần trăm).
// Nhan dang anh
publicvoid Recognize(double[] Input, ref T MatchedHigh, refdouble
OutputValueHight, ref T MatchedLow, refdouble OutputValueLow) {
int i, j;
double total = 0.0;
double max = -1;
//Apply input cho mang
for (i = 0; i < PreInputNum; i++) {
PreInputLayer[i].Value = Input[i]; }
//Tinh Inputs va Outputs cua lop Input
for (i = 0; i < InputNum; i++) {
total = 0.0;
for (j = 0; j < PreInputNum; j++) {
total += PreInputLayer[j].Value * PreInputLayer[j].Weights[i];
}
InputLayer[i].InputSum = total; InputLayer[i].Output = F(total); }
// Tinh Inputs va Outputs cua lop Hidden
for (i = 0; i < HiddenNum; i++) {
total = 0.0;
for (j = 0; j < InputNum; j++) {
total += InputLayer[j].Output * InputLayer[j].Weights[i];
}
HiddenLayer[i].InputSum = total; HiddenLayer[i].Output = F(total); }
//Tim Output trung voi mau
for (i = 0; i < OutputNum; i++) {
total = 0.0;
for (j = 0; j < HiddenNum; j++) {
total += HiddenLayer[j].Output* HiddenLayer[j].Weights[i];
} OutputLayer[i].InputSum = total; OutputLayer[i].output = F(total); if (OutputLayer[i].output > max) { MatchedLow = MatchedHigh; OutputValueLow = max; max = OutputLayer[i].output; MatchedHigh = OutputLayer[i].Value; OutputValueHight = max; } } }
Với những ảnh sau khi trích chọn đặc trưng trùng với mẫu đến 70% thì xác định đó là ảnh “đen” từ đó đưa ra màn hình cảnh báo. Sau đó nơ-ron cập nhật vào danh mục mẫu đã được training.Khả năng “tự học” là điểm rất hay của mạng nơ-ron nhân tạo.
3.2.3. Chương trình kiểm soát ảnh “đen” BlockPornImage
3.2.3.1. Một số hình ảnh về chương trình
Hình 3.4: Tab quản lý mạng và phát hiện ảnh
• Cấu hình mạng các tham số cho mạng nơ-ron 3 lớp
• Huấn luyện mạng
Hình 3.6: Mạng đang được huấn luyện
Hình 3.7: Ảnh đầu vào
Hình 3.8: Phát hiện ảnh chính xác (hiển thị cửa sổ che) 3.2.3.2. Môi trường thử nghiệm
• Máy sử dụng Core i5, 2410M, 2.3GHz; RAM 4GB • Cài đặt Microsoft .NET 3.5
3.2.3.3. Kết quả thực nghiệm
Để đánh giá khả năng phát hiện điểm ảnh da trong ảnh, sử dụng hai thông số đánh giá là:
• Tỷ lệ các ảnh không phải “đen” được cho là “đen” • Tỷ lệ các ảnh “đen” được xác định là ảnh “đen”.
Để tạo cơ sở dữ liệu học, tác giả đã xây dựng một tập hợp hơn 500 ảnh mẫu “đen” với tương ứng với các lớp là các bộ phận “đen” của cơ thể với các tư thế, điều kiện ánh sáng khác nhau. Chúng được chuẩn hóa về kích thước 30×35. Từ các mẫu ban đầu, bằng phép xoay (trong phạm vi 10o), phép lấy đối xứng trái-phải, tác giả tạo được ~ 1200 ảnh mẫu khác nhau. Tập hợp các ảnh này được sử dụng để huấn luyện mạng nơ-ron MLP.
Hệ thống phát hiện thử với 100 ảnh màu được khác nhau. Sau đây là bảng kết quả thực nghiệm:
Số lượng 78 22
Tỷ lệ 78% 22%
Bảng 3.1: Kết quả thử nghiệm
Có một số trường hợp bộ phân loại ảnh làm việc chưa thật tốt. Ví dụ hình 3.9
Hình 3.9:Một số phân loại sai
Trong ảnh khiêu dâm thứ nhất chứa nhiều ảnh nhỏ nối với nhau. Cửa sổ quét vùng da lớn nhất của ảnh này là rất lớn, nhưng xác suất da trung bình trong vùng da đó lại nhỏ. Ảnh thứ hai bị phát hiện sai là do ảnh có màu sắc như da và xác suất da trung bình trong cửa sổ quét toàn bộ vùng da và vùng da lớn nhất là rất cao. Ảnh thứ ba là một ảnh chân dung nhưng bị xác định là “đen” do có quá nhiều da và quần áo có màu như da.
Kết quả thực nghiệm của giải pháp đưa ra cho thấy các hình ảnh “đen” đã được phát hiện với tỷ lệ chính xác trong phạm vi cho phép và mang lại hiệu quả rõ rệt về thời gian.
Tóm tắt chương 3
Trong chương 3 đã trình bày quá trình thu thập, xử lý dữ liệu; phân tích, thiết kế chương trình thử nghiệm và đánh giá kết quả thử nghiệm.
PHẦN KẾT LUẬN
Phát hiện hình ảnh “đen” là một bài toán khó và mới. Để đáp ứng các yêu cầu đa dạng của thực tế, một giải pháp trọn vẹn và toàn diện cho vấn đề này đòi hỏi phải có khả năng xử lý tốt đáp ứng thời gian thực và đồng thời phải có khả năng đảm bảo độ phát hiện chính xác và hiệu quả khi có sự thay đổi của môi trường và đối tượng quan sát như: điều kiện ánh sáng, hướng, tư thế, sắc thái, sự che khuất bộ phận, sự xuất hiện có hoặc không của các thành phần phụ đi kèm… Đó là tất cả vấn đề đặt ra và đồi hỏi phải tiếp tục nghiên cứu.
Luận văn này đã nghiên cứu và cài đặt chương trìnhphát hiện ảnh “đen” bằng việc kết hợp sử dụng đặc trưng bất biến là màu da với kỹ thuật học của mạng nơ-ron để giảm thời gian tìm kiếm các bộ phận cần nhận dạng trong ảnh, để tăng tốc độ xử lý của hệ thống. Các kết quả thực nghiệm đã cho thấy những ưu điểm chủ yếu của giải pháp đưa ra vẫn đảm bảo tỷ lệ phát hiện chính xác trong phạm vi cho phép nhưng đã giảm đáng kể thời gian thực hiện. Tuy nhiên đây mới chỉ là kết quả bước đầu cũng chưa thể đáp ứng các yêu cầu thời gian thực.
Luận văn đã làm được: •Về mặt lý thuyết:
- Nắm được lý thuyết về xử lý ảnh
- Nắm được các phương phápnhận dạng ảnh - Nắm được lý thuyết mạng nơ-ron nhân tạo
- Năm đựơc lý thuyết nhận dạng ảnh sử dụng mạng nơ-ron nhân tạo •Về mặt thực tiễn:
- Đề xuất tạo ra các ảnh mới từ tập các ảnh học ban đầu bằng cách xoay ảnh những góc thích hợp cũng như đối xứng trái-phải trong quá trình huấn luyện mạng.
- Đề xuất cải tiến một số tham số khi xây dựng mạng nơ-ron (số nơ-ron lớp vào, số nơ-ron lớp ẩn, số nơ-ron lớp ra).
- Xây dựng được chương trình BlockPornImage phát hiện ảnh “đen” áp dụng các kỹ thuật xử lý ảnh số và kỹ thuật mạng nơ-ron truyền thẳng, lan truyền ngược sai số (Back-Propagation)cho kết quả nhận dạng nhanh, chính xác đáp ứng được yêu cầu đặt ra.Từ đó dễ dàng có thể tích hợp vào chương trình lọc chặn Web “đen” mà Công ty VDC đang phát triển.
Hướng nghiên cứu:
• Tích hợp vào chương trình lọc chặn Web “đen” của Công ty VDC để có một sản phẩm lọc chặn web “đen” trên máy cá nhân hoàn thiện để có thể thương mại hóa được.
• Phát hiện ảnh chuyển động (video, ảnh GIF, flash…)
• Mở rộng nghiên cứu một số lĩnh vực liên quan: nhận dạng khuôn mặt, nhận dạng vân tay, nhận dạng mống mắt,…
TÀI LIỆU THAM KHẢO
Tiếng Việt
[1]. Nguyễn Quang Hoan (2006), Giáo trình Xử lý ảnh số. (dùng cho hệ đào tạo đại học từ xa), Học viện công nghệ bưu chính viễn thông, tr.3-11, 15-17, 24- 26, 28-31, 60-81, .
[2]. Trần Đức Minh, Luận văn Thạc sĩ (2002), Ứng dụng mạng Nơ-ron nhân tạo trong dự báo thời tiết, tr.38-39
[3]. Nguyễn Thị Hoàng Lan, Nguyễn Thành Phương (2005), “Phát hiện khuôn
mặt dựa trên vùng màu da và mạng nơ-ron”, 2005, tr.6
[4]. Phạm Tiến Sơn (2007), Giáo trình Xử lý ảnh số, ĐH Đà Lạt, tr.22-24. [5]. Đỗ Năng Toàn, Phạm Việt Bình (2007),Giáo trình Xử lý ảnh, tr.7-27.
[6]. Nguyễn Thanh Thủy, Lương Mạnh Bá (2002), Nhập môn Xử lý ảnhsố, NXB
Khoa học và Kỹ thuật; chương 1, chương 7 (ebook theo từng chương).
[7]. Tài liệu thiết kế bộ lọc ảnh, đề tài KC.01.02/06-10(2010), "Nghiên cứu, phát triển hệ thống lọc nội dung hỗ trợ quản lý và đảm bảo an toàn – an ninh thông tin trên mạng Internet", Hà Nội, tr.5-6
Tiếng Anh
[8]. S. T. Bow (2002), Pattern Recognition and Image Processing, University of
Maryland, pp.62-82.
[9]. D. Graupe (2007), Principles of Artificial Neural Networks (2nd), World
Science Publishing Co. Pte. Ltd, pp.59-94.
[10]. J. S. Leea,Y. M. Kuob, P. C. Chung, E. L. Chenc (2006), “Naked image
detection based on adaptive and extensible skin color model”, pp.2-5.
[11]. S. Kasaei, A. Abadpour, “Pixel-Based Skin Detection for Pornography
Filtering”.
[12]. T. Masters (1993), Practical Neural Network Recipes in C++, Academic
Press, Inc, pp.50-60.
[13]. M. T. Hagan, H. B. Demuth, M. Beale (1996), Neural networks design, PWS
Publishing Company, Boston, pp.2.1-2.23, 4.1-4.36, 9.1-9.39, 11.1-11.43, 12.1-12.50.
[14]. S. Haykin (1994), Neural networks, a comprehensive foundation, Macmillan New York, Ny, pp.23-32, 43-45, 56-60, 85-86, 183-195.
[15]. M. Rehg, M. J. Jones James(1998), “Statistical Color Models with