Một thuật toán phát hiện bóng cứng với nguồn sáng song song

Một thuật toán phát hiện bóng cứng với nguồn sáng song song

Trịnh Hiền Anh(1) ,Lê Thị Kim Nga(3) , Phạm Khắc Tuy(2) , Phạm Bá Mấy(1) ,Đỗ Văn Thiện(1)

1: Viện Công nghệ thông tin, Viện Hàn lâm Khoa học và Công nghệ Việt Nam ([email protected])
2: Đại học Công nghiệp Hà Nội
3: Đại học Quy Nhơn

Tóm tắt: Báo cáo này đề xuất một thuật toán phát hiện bóng của đối tượng trong ảnh. Bóng ở đây được hiểu
là hình chiếu của đối tượng trên một bề mặt nằm ngang với nguồn sáng là mặt trời. Thuật toán mà bài báo
đưa ra dựa vào việc phân tích hướng của nguồn sáng 3D trên các điểm bao ngoài của đối tượng, nhờ đó có thể
khoanh vùng được bóng của đối tượng.
Từ khóa: Shadow detection, light source, object detection…

1  Giới thiệu

Ánh sáng giúp ta quan sát được mọi sự vật và hiện tượng có trong tự nhiên. Khi ánh sáng chiếu đến vật thể, một phần ánh sáng được phản xạ lại mắt giúp ta quan sát được vật thể đó, một phần bị hút và một phần được chiếu tới mặt phẳng tạo thành bóng. Có thể nói, bóng là một thành phần không thể thiếu được của vật thể khi nhận được ánh sáng từ một nguồn sáng bất kỳ.

Có hai loại bóng là bóng cứng và bóng mềm:

– Bóng cứng được hình thành từ nguồn sáng trực tiếp và mạnh hơn nhiều lần các nguồn ánh sáng khác (nếu có). Bóng của đối tượng sẽ in lên đối tượng khác thành một vệt có màu xám đặc trưng, tối hẳn so với các vùng xung quanh.

– Trong khi, bóng mềm được hình thành từ nguồn sáng yếu hơn, có thể bị tán xạ và làm yếu đi. Bóng này có dạng mờ, tại đó ngoài cảm giác bóng ta có thể nhìn được hình dạng, màu sắc đối tượng mà bóng đã đè lên nhưng nhạt hơn so với khi không có bóng.

Phát hiện và khử bóng cho các đối tượng trong ảnh là một bài toán được đặt ra trong nhiều ứng dụng thực tế. Các phương pháp tập trung vào mô hình sự khác nhau về màu sắc, thống kê cường độ và các thuật toán gom cụm, phân lớp… Ví dụ, các tác giả từ Hungary [1] sử dụng phép phân tích và thống kê cường độ. Thuật toán tỏ ra hiệu quả trên ảnh có bóng cứng và cấu trúc đơn giản nhưng lại cho kết quả sai lệch với ảnh chứa nhiều vùng bóng. Với hướng tiếp cận khác [2], các tác giả đến từ Ấn Độ lại sử dụng mô hình suy giảm ba màu và thuật toán phân đoạn Watershed để phát hiện vùng bóng. Phương pháp này phù hợp cho các ảnh trình tự như trong video nhưng cũng không đạt được nhiều nhiều kết quả khả quan. Trong [3], họ lại sử dụng việc phân tích các đặc trưng trong ảnh và liên kết màu xám áp dụng cho ảnh cảnh quan đô thị. Cũng dựa trên sự tính toán về mật độ bóng từ ảnh thực, các tác giả [4] tính mật độ bóng(được định nghĩa bởi đo mức ánh sáng) trong ảnh. Do vậy, thuật toán hoạt động dựa trên ảnh ngoài trời và cấu trúc bóng đơn.

Bài báo này, nhóm tác giả đề xuất một thuật toán phát hiện bóng cứng của đối tượng trong bài toán giám sát giao thông đô thị.

Phần còn lại của bài báo được cấu trúc như sau: phần 2 giới thiệu một số khái niệm cơ bản, phần 3 giới thiệu thuật toán phát hiện bóng đối tượng với nguồn sáng song song, phần 4 trình bày các kết quả thực nghiệm và cuối cùng là kết luận về kỹ thuật đề xuất.

Địa chỉ xem toàn bộ bài báo: link

Tạo ChatBot AI bằng Python với AIML

ChatBot AI(ChatBot thông minh hay ChatBot trí tuệ nhân tạo) được viết dễ dàng bằng Python với gói AIML. AIML là viết tắt của Ngông ngữ đánh dấu Trí Tuệ nhân tạo, nhưng nó đơn giản chỉ là ngôn ngữ XML. Các đoạn code Python dưới đây sẽ giúp bạn tạo một ChatBotAI của mình.

AIML là gì?

AIML được phát triển bởi Richard Wallace. Anh ấy tạo một con bot gọi là A.L.I.C.E (Artificial Linguistics Internet Computer Entity) đã giành được một số giải thưởng về trí tuệ nhân tạo. Rất thú vị, một trong những bài kiểm tra của Turing để xem có trí thông minh nhân tạo hay không bằng cách để con người chat với một con bot trong vài phút và để người đó nghĩ xem có đúng là đang chat với người hay không thông giao diện văn bản. AIML là một dạng của XML định nghĩa các quy tắc để kết hợp các mẫu câu hỏi và xác định câu trả lời cho nó.

Đối với bản thử nghiệm đầu tiên đầy đủ của AIML, bạn hãy kiểm tra chatbotAI đầu tiên với Alice Bot’s tại link: http://www.alicebot.org/documentation/aiml-primer.html. Bạn cũng có thể tìm hiểu sâu thêm về AIML và những gì AIML có thể làm được tại: https://en.wikipedia.org/wiki/AIML. Chúng ta sẽ tạo các tập tin AIML đầu tiên và sau đó sử dụng Python để tạo một chatbotAI.

Bắt đầu tạo các file AIML cơ bản

Tạo file XML đầu tiên là std-startup.xml làm file chính để cấu hình chỉ định các file AIML. Trong trường hợp này, chúng ta sẽ tạo một file cơ bản với một pattern và có 1 hành động. Chúng ta cần tạo pattern là load aiml b, và nó sẽ load các câu trả lời. Chúng ta tạo file basic_chat.aiml trong một phút:

<aiml version="1.0.1" encoding="UTF-8">
<!-- std-startup.xml -->

<!-- Category is an atomic AIML unit -->
<category>

<!-- Pattern to match in user input -->
<!-- If user enters "LOAD AIML B" -->
<pattern>LOAD AIML B</pattern>

<!-- Template is the response to the pattern -->
<!-- This learn an aiml file -->
<template>
<learn>basic_chat.aiml</learn>
<!-- You can add more aiml files here -->
<!--<learn>more_aiml.aiml</learn>-->
</template>

</category>

</aiml>

Tạo file AIML

Ở trên chúng ta đã tạo ra file AIML chỉ xử lý một pattern là load aiml b. Khi chúng ta hỏi bot là load aiml b thì nó sẽ cố gắng tải file basic_chat.aiml. Nó sẽ không hoạt động nếu chúng ta chưa tạo ra file basic_chat.aiml. Đây là chỗ mà chúng ta có thể đặt các thông tin vào bên trong basic_chat.aiml. Chúng ta sẽ kết hợp hai pattern cơ bản và câu trả lời cho chúng.
<aiml version="1.0.1" encoding="UTF-8">
<!-- basic_chat.aiml -->

<category>
<pattern>HELLO</pattern>
<template>
Well, hello!
</template>
</category>

<category>
<pattern>WHAT ARE YOU</pattern>
<template>
I'm a bot, silly!
</template>
</category>

</aiml>

Câu trả lời ngẫu nhiên

Để bot không trả lời các câu hỏi một cách cứng nhắc, chúng ta cần thêm vào các câu trả lời mà nó có thể chọn ngẫu nhiên. Một câu trả lời ngẫu nhiên khi nó nhận được một tin nhắn bắt đầu bằng: One time I. Dấu * là sự đánh dấu phù hợp với bất kỳ thứ gì.
<category>
<pattern>ONE TIME I *</pattern>
<template>
<random>
<li>Go on.</li>
<li>How old are you?</li>
<li>Be more specific.</li>
<li>I did not know that.</li>
<li>Are you telling the truth?</li>
<li>I don't know what that means.</li>
<li>Try to tell me that another way.</li>
<li>Are you talking about an animal, vegetable or mineral?</li>
<li>What is it?</li>
</random>
</template>
</category>

Sử dụng các file AIML

Bạn có thể nhàm chán với việc tạo các file AIML, nhưng để có thể hoạt động được bạn phải tạo ra rất nhiều file AIML. Tôi nghĩ cần phải tạo khoảng 10.000 patterns để có thể bắt đầu. Thật may mắn, ALICE cung cấp miễn phí nhiều file AIML, ta có thể lấy chúng tại website Alice Bot. Nổi bật là file có tên std-65-percent.xml chưa được 65% các cụm từ phổ biến. Ngoài ra nó còn cho phép bạn chơi trò BlackJack với bot.
Cài đặt module AIML cho Python
Cho tới bây giờ, chúng ta đã tạo mọi thứ với file AIML với định dạng XML. Điều đó là quan trọng tạo nên bộ não của bot, nhưng đó chỉ là thông tin. Để ta có thể tương tác với các thông tin này, ta có thể sử dụng bất kỳ ngôn ngữ lập trình nào thực hiện được với các cấu trúc xml của các file AIML. Đơn giản nhiều người sử dụng Python để con bot có thể hoạt động.

Python 2
Đối với Python 2 ta có thể cài gói AIML với pip:
pip install aiml
hoặc tải tại: https://pypi.python.org/pypi/aiml/
Python 3
Đối với Python 3 cũng tương tự như vậy, bạn vẫn phải cài đặt gói AIML với pip:
pip install python-aiml
hoặc tải tại: https://github.com/paulovn/python-aiml

Đây là hướng dẫn tạo ChatBot AI bằng Python, từ đây ta có thể yạo một chương trình Python đơn giản cho bản thân.

Bạn có thể tham khảo thêm tại đây.

Ứng dụng của Trí tuệ nhân tạo

Ứng dụng của Trí tuệ nhân tạo

AI đã chiếm ưu thế trong nhiều lĩnh vực khác nhau như:

Gaming (Trò chơi): AI đóng vai trò quan trọng trong các trò chơi chiến lược như cờ vua, pocker, tic-tac-toe… nơi máy tính có thể nghĩ về số lượng lớn các khả năng có thể dựa trên các kinh nghiệm.

Natural Language Processing (Xử lý ngôn ngữ tự nhiên): Có thể tương tác với máy tính hiểu ngôn ngữ tự nhiên của con người.

Expert System (Hệ chuyên gia): Có một số chương trình tích hợp máy, phần mềm và thông tiên đặc biệt để truyền đạt lý luận và tư vấn. Nó cung cấp lời giải thích và lời khuyên cho người dùng.

Vision System (Thị giác máy tính): Các hệ thống này có thể hiểu, giải thích và hiểu đầu vào trực quan trên máy tính. Ví dụ:

  • Một chiếc máy bay gián điệp chụp ảnh, được sử dụng để tìm ra thông tin không gian hoặc bản đồ của các khu vực.
  • Các bác sĩ có thể sử dụng hệ thống chuyên gia lâm sang để chuẩn đoán bệnh nhân.
  • Cảnh sát dụng phần mềm máy tính có khả năng nhận dạng khuôn mặt tội phạm với bức chân dung được lưu trữ thực hiện bởi các bác sĩ pháp y.

Speech Recognition (Nhận dạng giọng nói): Một hệ thống thông minh có thể nghe và hiểu ngôn ngữ về các câu, ý nghĩa của chúng trong khi mội người nói chuyện với nó. Nó có thể xử lý các điểm nhấn, từ nóng, tiến ồn…

Handwriting Recognition (Nhận dạng chữ viết tay): Phần mềm nhận dạng chữ viết có thể đọc các văn bản viết trên giấy bằng bút hoặc trên màn hình cảm ứng. Nó nhận ra các hình dạng chữ cái và chuyển đổi thành văn bản có thể chỉnh sửa.

Intelligent Robots (Robot thông minh): Robot có thể thực hiện các nhiệm vụ do con người đưa ra. Nó có cảm biến để phát hiện ra các dữ liệu vật lý từ thế giới thực như ánh sáng, nhiệt độ, độ ẩm, chuyển động, âm thanh, áp suất. Từ đó nó có thể xử lý thông tin với bộ nhớ khổng lồ để thể hiện trí thông minh. Ngoài ra, nó có khả năng học hỏi từ những sai lầm của nó và thích nghi với môi trường mới.

Tổng quan về Trí tuệ nhân tạo

Kể từ khi con người phát minh ra máy tính hoặc máy móc, khả năng để nó thực hiện các nhiệm vụ khác nhau đã tăng lên theo cấp số nhân. Con người đã phát triển sức mạnh của các hệ thống máy tính cả về lĩnh vực hoạt động đa dạng, tốc độ xử lý và giảm về kích thước.
Một nhánh của Khoa học máy tính có tên là Trí tuệ nhân tạo theo đuổi việc tạo ra máy tính hoặc máy móc có trí thông minh như con người. Sau đây là tổng quan về trí tuệ nhân tạo giúp người mới có một cái nhìn tổng quan về một ngày đang hot hiện nay.

Thế nào là Trí thông minh nhân tạo?

Theo người đầu tiên đề xuất về khái niệm Trí tuệ nhân tạo – John McCarthy: Khoa học và kỹ thuật tạo ra các máy móc thông minh, đặc biệt là các chương trình máy tính thông minh.
Trí tuệ nhân tạo là một cách để chế tạo một chiếc máy tính, một robot được điều khiển bằng máy tính hoặc một phần mềm có khả năng suy nghĩ một cách thông minh tương tự như cách mà con người suy nghĩ.
Trí tuệ nhân tạo (AI) được thực hiện bằng cách nghiên cứu cách nào người suy nghĩ, cách con người ra quyết định và làm việc trong khi cố gắng giải quyết vấn đề. Sau đó sử dụng các kết quả nghiên cứu này làm cơ sở để phát triển các phần mềm thông minh hoặc hệ thống thông minh.

Triết lý của AI?

Trong quá trình sử dụng và khai thác sức mạnh của hệ thống máy tính, sự tò mò của con người khiến họ tự hỏi: Máy móc có thể suy nghĩ và cư xử như con người không?
Do đó, sự phát triển của AI bắt đầu với mục đích tạo ra trí thông minh nhân tạo tương tự như trí thông minh của con người.

Mục đích của AI?

  •  Để tạo ra hệ chuyên gia: Các hệ thống thể hiện hành vi thông minh, học hỏi, chứng minh, giải thích và tư vấn cho người dùng của mình.
  •  Để máy móc có trí tuệ như con người: Tạo ra các hệ thống có thể hiểu, suy nghĩ, học hỏi và hành xử giống con người.

Các ngành có thể đóng góp cho AI?

Một hoặc nhiều khu vực của các ngành khoa học sau có thể đóng góp để xây dựng các hệ thống thông minh: Khoa học máy tính, Sinh học, Tâm lý học, Ngôn ngữ học, Toán học, Xã hội học, Khoa học Nơ-ron.

Một lực đẩy lớn của AI là sự phát triển các chức năng máy tính gắn liền với trí thông minh của con người. Ví dụ như lý luận, học tập và giải quyết vấn đề.

Lập trình có AI và lập trình không có AI

Chương trình không có và có AI khác nhau theo các cách sau:

* Lập trình không có AI
– Chương trình không có AI có thể trả lời các câu hỏi cụ thể đã được định sẵn.
– Sửa đổi chương trình sẽ dẫn đến thay đổi cấu trúc của nó.
– Sửa đổi khó khăn và chậm chạp. Nó có thể ảnh hưởng xấu dẫn đến chương trình chạy sai hoặc không chạy được

* Lập trình có AI
– Chương trình có AI có thể trả lời các câu hỏi chung chung, có thể chưa được chỉ định câu trả lời từ trước.
– Chương trình có AI có thể tự cập nhật các sửa đổi mới bằng các đặt các thông tin độc lập cao với nhau. Do đó có thể sửa đổi mà không ảnh hưởng đến cấu trúc của chương trình.
– Có thể sửa đổi chương trình nhanh chóng và dễ dàng.

Kỹ thuật AI là gì?

Trong thế giới thực, kiến thức của một số thuộc tính không được hoan nghênh:
– Khối lượng của nó lớn.
– Không được tổ chức hoặc định dạng tốt
– Liên tục thay đổi

Kỹ thuật AI là một cách để tổ chức và sử dụng kiến thức một cách hiệu quả:
– Nó có thể nhận thức bởi những người cung cấp
– Có thể dễ dàng sửa đổi để sửa lỗi
– Nó hữu ích trong nhiều tình huống mặc dù không phải là tất cả hoặc chính xác hoàn toàn.
Kỹ thuật AI nâng cao tốc độ thực thi của chương trình phức tạp mà nó được trang bị.

Trên đây là những điều cơ bản và tổng quan về Trí tuệ nhân tạo giúp người mới có thể tiếp cận được. Sau đây sẽ là seri các bài về trí tuệ nhân tạo được dịch từ tutorialspoint.com.

NeuroChain: Blockchain gặp Trí tuệ nhân tạo

NeuroChain: Blockchain gặp Trí tuệ nhân tạo

Tóm tắt: Bài viết mô tả một công nghệ mới dựa trên hệ thống phân tán giống Blockchain và được hỗ
trợ bởi các thuật toán máy học. Công nghệ NeuroChain là sự hợp nhất hoàn hảo giữa Blockchain và
máy học dựa trên ba trụ cột chính sau:
– Đối tượng ra quyết định: Một Chuỗi các Bot
– Bộ các quy tắc: Giao thức Ra quyết định (Proof of Involvement and Integrity & Proof of
Workflow)
– Mạng lưới và phương tiện truyền thông: Pragmatic Communication Channels (giao thức giao
tiếp thích ứng theo hoàn cảnh) và Hệ sinh thái học tập.

Link Tải: https://www.neurochaintech.io/pdf/int/vi-tech-whitepaper.pdf