1. Trang chủ
  2. » Luận Văn - Báo Cáo

Thiết kế giao tiếp camera và hiển thị màn hình vga trên kit de10

61 61 2

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Thiết Kế Giao Tiếp Camera Và Hiển Thị Màn Hình VGA Trên Kit DE10
Tác giả Tiêu Tuấn Đạt
Người hướng dẫn PGS. TS Trương Quang Vinh
Trường học Đại học Bách Khoa
Chuyên ngành Điện – Điện Tử
Thể loại Đồ án
Năm xuất bản 2023
Thành phố TP. Hồ Chí Minh
Định dạng
Số trang 61
Dung lượng 4,07 MB

Cấu trúc

  • I. GIỚI THIỆU (10)
    • 1. Tổng quan (10)
    • 2. Nhiệm vụ đề tài (10)
  • II. LÝ THUYẾT (12)
    • 1. Tìm hiểu về dòng KIT SoC FPCA – DE10 Standard (12)
      • 1.1. Tổng quan về FPGA (12)
      • 1.2. Tổng quan về SoC (14)
      • 1.3. Tổng quan Kit DE10-standard (14)
    • 2. Tìm hiểu về Qsys và project GHDR từ Intel (26)
      • 2.1. Qsys là gì? (26)
      • 2.2. Thành phần Qsys là gì? (27)
      • 2.3. Project GHRD (Golden Hardware Reference Design) (27)
    • 3. Tìm hiểu về giải thuật Haar Cascade (31)
      • 3.1. Haar Cascade là gì? (31)
      • 3.2. Đặc trưng giải thuật Haar Cascade (31)
      • 3.3. Hoạt động của giải thuật Haar Cascade (33)
  • III. THIẾT KẾ VÀ THỰC HIỆN PHẦN CỨNG (33)
    • 1. Yêu cầu thiết kế (33)
    • 2. Phân tích thiết kế (33)
    • 3. Thực hiện phần cứng (35)
  • IV. THIẾT KẾ VÀ THỰC HIỆN PHẦN MỀM (NẾU CÓ) (43)
    • 2. Thiết kế phần mềm (43)
  • V. KẾT QUẢ THỰC HIỆN (46)
    • 1. Khởi tạo hệ thống SoC (46)
      • 1.1. Khởi tạo môi trường linux trên board (46)
      • 1.2. Thiết lập kết nối máy tính với board (47)
    • 2. Vận hành hệ thống SoC (50)
      • 2.1. Vận hành phần cứng (50)
      • 2.2. Vận hành phần mềm (55)
        • 2.2.1. Đảm bảo đầy đủ các file cần thiết (55)
        • 2.2.2. Tạo Makefile (56)
        • 2.2.3. Thư viện OpenCV (56)
        • 2.2.4. GNU Toolchain (57)
        • 2.2.5. Biên dịch phần mềm (57)
      • 2.3. Thực hiện Demo (58)
  • VI. KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN (60)
    • 1. Kết luận (60)
    • 2. Hướng phát triển (60)
  • VII. TÀI LIỆU THAM KHẢO (61)

Nội dung

Ngày náy công nghệ đang ngày càng phát triển và những công nghệ xử lý ảnh đã và đang trở thành một ứng dụng kỹ thuật hữu dụng và được sử dụng rộng rãi. Ứng dụng xử lý ảnh được thực hiện trên nhiều dòng kit khác nhau và FPGA là một trong các dòng kit đó. FPGA có độ linh động cao trong quá trình thiết kế cho phép tái cấu. trúc thiết kế giải quyết lớp những bài toán phức tạp mà trước kia chỉ nhờ phần mềm máy tính. FPGA có thể được lập trình để thực hiện các chức năng xử lý ảnh khác nhau như lọc ảnh, phân tích hình ảnh và nhận dạng hình ảnh. FPGA có thể được sử dụng để xử lý ảnh vì chúng có thể được lập trình để thực hiện các chức năng xử lý ảnh khác nhau và có thể được cấu hình để phù hợp với các yêu cầu cụ thể của một ứng dụng xử lý ảnh. Ngoài ra, nhờ mật độ cổng logic lớn FPGA được ứng dụng nhiều trong các lĩnh vực: xử lý tín hiệu số DSP, các hệ thống hàng không, vũ trụ, quốc phòng, tiền thiết kế mẫu ASIC (ASIC prototyping), các hệ thống điều khiển trực quan, phân tích nhận dạng hình ảnh, mô hình phần cứng máy tính, … Với mục đích hướng tới có thể thực hiện các ứng dụng xử lý ảnh trên nền tảng phần cứng em đã lựa chọn Kit DE10 standard (dòng kit SoC – FPGA của intel) để tìm hiểu. Đặc biệt với dòng kit này cung cấp công cụ Qsys, công cụ hữu ích giúp người dùng có thể xây dựng mô hình hệ thống phần cứng từ các thành phần có sẵn hoặc tạo mới. Và trong đề tài đồ án này em tiến hành nghiên cứu cách sử dụng kit DE10 và tìm hiểu cách xây dưng một hệ thống Qsys dựa mô hình tham chiếu của Intel Golden Hardware Reference Design (GHRD), sau đó dùng hệ thống này thực hiện ứng dụng nhận diện khuôn mặt để kiểm tra hệ thống Qsys đã xây dựng.

GIỚI THIỆU

Tổng quan

Ngày náy công nghệ đang ngày càng phát triển và những công nghệ xử lý ảnh đã và đang trở thành một ứng dụng kỹ thuật hữu dụng và được sử dụng rộng rãi Ứng dụng xử lý ảnh được thực hiện trên nhiều dòng kit khác nhau và FPGA là một trong các dòng kit đó FPGA có độ linh động cao trong quá trình thiết kế cho phép tái cấu trúc thiết kế giải quyết lớp những bài toán phức tạp mà trước kia chỉ nhờ phần mềm máy tính FPGA có thể được lập trình để thực hiện các chức năng xử lý ảnh khác nhau như lọc ảnh, phân tích hình ảnh và nhận dạng hình ảnh FPGA có thể được sử dụng để xử lý ảnh vì chúng có thể được lập trình để thực hiện các chức năng xử lý ảnh khác nhau và có thể được cấu hình để phù hợp với các yêu cầu cụ thể của một ứng dụng xử lý ảnh Ngoài ra, nhờ mật độ cổng logic lớn FPGA được ứng dụng nhiều trong các lĩnh vực: xử lý tín hiệu số DSP, các hệ thống hàng không, vũ trụ, quốc phòng, tiền thiết kế mẫu ASIC (ASIC prototyping), các hệ thống điều khiển trực quan, phân tích nhận dạng hình ảnh, mô hình phần cứng máy tính, …

Với mục đích hướng tới có thể thực hiện các ứng dụng xử lý ảnh trên nền tảng phần cứng em đã lựa chọn Kit DE10 standard (dòng kit SoC – FPGA của intel) để tìm hiểu Đặc biệt với dòng kit này cung cấp công cụ Qsys, công cụ hữu ích giúp người dùng có thể xây dựng mô hình hệ thống phần cứng từ các thành phần có sẵn hoặc tạo mới Và trong đề tài đồ án này em tiến hành nghiên cứu cách sử dụng kit DE10 và tìm hiểu cách xây dưng một hệ thống Qsys dựa mô hình tham chiếu của Intel Golden Hardware Reference Design (GHRD), sau đó dùng hệ thống này thực hiện ứng dụng nhận diện khuôn mặt để kiểm tra hệ thống Qsys đã xây dựng.

Nhiệm vụ đề tài

Với mục đích hướng đến việc hiển thị hình ảnh từ camera lên màn hình thông qua cổng VGA cần xây dựng hệ thống Qsys phát hiện khuôn mặt trên Kit DE10 thì đề tài đồ án cần thực hiện các nhiệm vụ sau đây:

Nội dung 1: Tìm hiểu về dòng Kit Soc FPGA - DE10 standard

Nội dung 2: Tìm hiểu về Qsys và project GHDR từ Intel

Nội dung 3: Tìm hiểu về giải thuật Haar Cascade sử dụng trong OpenCV

Nội dung 4: Thực hiện thiết kế phần cứng hệ thống Qsys trên kit DE10 dựa trên nền tảng mô hình tham chiếu của Intel Golden Hardware Reference Design (GHRD)

Nội dung 5: Thực hiện thiết kế hiện thực hệ thống SoC, thực hiện demo trên kit phần mềm xử lý nhận diện khuôn mặt dựa trên giải thuật Haar Cascade

Nội dung 6: Hiện thực hệ thống SoC, thực hiện demo trên kit

LÝ THUYẾT

Tìm hiểu về dòng KIT SoC FPCA – DE10 Standard

FPGA là viết tắt của Field Programmable Gate Array, có nghĩa là mảng cổng logic có thể lập trình trên mạch FPGA là một loại vi mạch bán dẫn, trong đó phần lớn chức năng bên trong thiết bị có thể được thay đổi; có thể được thay đổi bởi kỹ sư thiết kế, thay đổi trong quá trình lắp ráp PCB, hoặc thậm chí thay đổi sau khi sản phẩm được triển khai Những thay đổi được tạo ra bằng cách thay đổi các tín hiệu điện vào và ra được nhận, các cổng logic và flipflop được thực hiện, và cách kết nối các cổng với nhau

Một FPGA được tạo thành từ một lưới các logic có thể cấu hình, được gọi là module logic thích ứng (ALM), và các khối chuyên biệt, như khối xử lý tín hiệu số (DSP) và khối bộ nhớ truy cập ngẫu nhiên (RAM) Các khối lập trình này được kết hợp thông qua các liên kết định tuyến có thể cấu hình để thực hiện các mạch số hoàn chỉnh

Bộ nhớ tĩnh đầu tiên dựa trên FPGA (thường được gọi là SRAM trên nền FPGA) được đề xuất bởi Wahlstrom vào năm 1967 Sau đó bản thương mại của FPGA được Xilinx giới thiệu vào năm 1984 Lúc này nó gồm có một mảng của các khối logic có thể tái cấu hình – Configurable Logic Blocks (CLBs) và các đầu vào ra – I/O (input/output) Chip FPGA đầu tiên chứa 64 CLBs và 58 I/Os Ngày nay, FPGA có thể chứa khoảng 330,000 CLBs và khoảng 1100 I/Os Phần lớn các sản phẩm FPGA trên thị trường hiện nay đều dựa trên công nghệ SRAM với 2 hãng sản xuất lớn nhất là Xilinx và Altera Ngoài ra còn có các hãng khác sản xuất FPGA nhưng với mục đích chuyên dụng (Atmel, Actel, Lattice, SiliconBlue, )

Kiến trúc cơ bản của FPGA bao gồm 3 thành phần chính: khối logic có thể tái cấu hình, Configurable Logic Blocks (CLBs) thực hiện các chức năng logic; các kết nối bên trong, Porgrammable Interconnect có thể lập trình để kết nối các đầu vào và đầu ra của các CLB và các khối I/O bên trong; các khối I/O cung cấp giao tiếp giữa các ngoại vi và các được tín hiêu bên trong

Khối logic có thể tái cấu hình: Đây là một trong những ưu điểm lớn nhất của FPGA, mục đích của việc lập trình khối logic trong FPGA là để cung cấp các tính toán và các phần tử

4 nhớ cơ bản được sử dụng trong hệ thống số Một phần tử logic cơ bản gồm một mạch tổ hợp có thể lập trình, một Flip-Flop hoặc một chốt (latch) Ngoài khối logic cơ bản đó, nhiều Chip FPGA hiện nay gồm một hỗn hợp các khối khác nhau, một số trong đó chỉ được dùng cho các chức năng cụ thể, chẳng hạn như các khối bộ nhớ chuyên dụng, các bộ nhân (multipliers) hoặc các bộ ghép kênh (multiplexers) Tất nhiên, cấu hình bộ nhớ được sử dụng trên tất cả các khối logic để điều khiển các chức năng cụ thể của mỗi phần tử bên trong khối đó

Kết nối có thể lập trình: Các liên kết trong một FPGA dùng để liên kết các khối logic và I/O lại với nhau để tạo thành một thiết kế Bao gồm các bộ ghép kênh, các transistor và cổng đệm ba trạng thái Nhìn chung, các transistor và bộ ghép kênh được dùng trong một cụm logic để kết nối các phần tử logic lại với nhau, trong khi đó cả ba đều được dùng cho các cấu trúc định tuyến bên trong FPGA Một số FPGA cung cấp nhiều kết nối đơn giản giữa các khối logic, một số khác cung cấp ít kết nối hơn nên định tuyến phức tạp hơn

Khối I/O liên kết: I/O cung cấp giao tiếp giữa các khối logic và kiến trúc định tuyến đến các thành phần bên ngoài Một trong những vấn đề quan trọng nhất trong thiết kế kiến trúc I/O là việc lựa chọn các tiêu chuẩn điện áp cung cấp và điện áp tham chiếu sẽ được hỗ trợ Theo thời gian, các kiến trúc FPGA cơ bản đã được phát triển hơn nữa thông qua việc bổ sung các khối chức năng đặc biệt có thể lập trình, như bộ nhớ trong (Block RAMs), logic số học (ALU), bộ nhân, DSP-48 và thậm chí là bộ vi xử lý nhúng được thêm vào do nhu cầu của các nguồn tài nguyên cho một ứng dụng Kết quả là nhiều FPGA ngày nay có nhiều nguồn tài nguyên hơn so với các FPGA trước đó

Ngôn ngữ mô tả phần cứng (Hardware Description Language): Ngôn ngữ mô tả phần cứng bao gồm VHDL, Verilog, SystemC và Handle-C thường được sử dụng để lập trình FPGA VHDL và Verilog phát triển như là một chuẩn công nghiệp và là hai ngôn ngữ phổ biến nhất hiện nay Ngôn ngữ nào cũng tốt nhưng có một điều chắc chắn là Xilinx ISE và Altera Quartus đều hỗ trợ VHDL và Verilog

2.1.3 Ứng dụng FPGA Ứng dụng của FPGA bao gồm: xử lý tín hiệu số DSP, các hệ thống hàng không, vũ trụ, quốc phòng, tiền thiết kế mẫu ASIC (ASIC prototyping), các hệ thống điều khiển trực quan, phân tích nhận dạng hình ảnh, nhận dạng tiếng nói, mật mã học, mô hình phần cứng máy tính, …

Do tính linh động cao trong quá trình thiết kế cho phép FPGA giải quyết lớp những bài toán phức tạp mà trước kia chỉ nhờ phần mềm máy tính, ngoài ra nhờ mật độ cổng logic lớn FPGA được ứng dụng cho những bài toán đòi hỏi khối lượng tính toán lớn và dùng trong các hệ thống làm việc theo thời gian thực

System on Chip là hệ thống mạch tích hợp bao gồm tất cả các thành phần cần thiết được tích hợp trên 1 chip duy nhất Các thành phần này có thể bao gồm mạch số (digital), mạch analog và sự pha trộn giữa hai mạch này (mixed-signal)

Ví dụ một SoC dùng để xử lý âm thanh có thể bao gồm các thành phần audio receiver (bộ thu nhận audio), bộ ADC (chuyển đổi từ tín hiệu analog sang tín hiệu digital), bộ vi xử lý, bộ điều khiển vùng nhớ (memory) và các thành phần điều khiển ra vào khác Tất cả được tích hợp vào một SoC duy nhất

System on Chip là một mức phát triển cao hơn của thiết kế ASIC (Application Specific Integrated Circuit) Tuy nhiên, với sự phát triển nhanh chóng của ngành công nghiệp bán dẫn và các ứng dụng đi kèm, hệ thống chip ASIC hay là SoC có thể được hiểu là gần tương đương nhau

Những lợi thế chính của các thiết bị SoC là chi phí thấp hơn, giảm đáng kể kích thước, và giảm điện năng tiêu thụ của hệ thống Hệ thống kỹ thuật số bằng cách sử dụng SoC thiết kế, như là những người được sử dụng trong các sản phẩm cầm tay kỹ thuật số, các hệ thống kỹ thuật số được xây dựng trên một trong một gói có nhiều chip Khi tiến công nghệ, tích hợp của các phần tử khác nhau trong một thiết kế SoC trở nên ngày càng phức tạp Một thiết bị tích hợp SoC vào một chip duy nhất nhiều thành phần của một hệ thống điện tử phức tạp, chẳng hạn như một bộ tiếp nhận không dây SoC các thiết bị sẽ giảm kích thước đi rất nhiều, chi phí và tiêu thụ điện năng của hệ thống Một hệ thống trên chip có thể bao gồm một đơn vị logic cấu hình Các đơn vị logic cấu hình bao gồm một bộ xử lý, interface, và logic lập trình trên cùng một chất nền Một hệ thống-trên-chip được thiết kế tích hợp nhiều thiết kế độc lập VLSI (lõi) để cung cấp đầy đủ chức năng cho một ứng dụng

1.3 Tổng quan Kit DE10-standard

Tìm hiểu về Qsys và project GHDR từ Intel

Công cụ Qsys cho phép người dùng kết hợp một hệ thống với nhau bằng cách sử dụng các thành phần được tạo sẵn hoặc tùy chỉnh Các hệ thống như vậy thường bao gồm một hoặc nhiều bộ xử lý, giao diện bộ nhớ, cổng I / O và phần cứng tùy chỉnh khác Hệ thống do Qsys tạo ra có thể được đưa vào như một phần của mạch lớn hơn và được triển khai trên bảng FPGA, chẳng hạn như Altera DE-series Ví dụ về một hệ thống như vậy được mô tả trong Hình 8, trong đó phần của hệ thống được tạo bởi công cụ Qsys được đánh dấu bằng màu xanh lam

Hình 8 Altera DE-series board

Mỗi thành phần trong hệ thống, được gọi là thành phần Qsys, tuân theo ít nhất một trong các Giao diện Avalon được Qsys hỗ trợ Với giao diện được xác định cho thành phần, Qsys có thể xây dựng một cấu trúc kết nối, được gọi là Avalon Interconnect, cho phép các thành phần trao đổi dữ liệu Công cụ Qsys có thể tạo ra một hệ thống dựa trên tập hợp các thành phần và thông số người dùng đã chọn Hệ thống được tạo chứa mã Verilog hoặc VHDL cho từng thành phần và cấu trúc kết nối, cho phép nó được tổng hợp, đặt và định tuyến cho thiết bị FPGA

2.2 Thành phần Qsys là gì?

Thành phần Qsys là một mạch con phần cứng có sẵn như một thành phần thư viện để sử dụng trong công cụ Qsys Thông thường, nó chứa hai phần: các mô đun phần cứng bên trong và các Giao diện Avalon bên ngoài Các mô-đun bên trong là các mạch thực hiện chức năng mong muốn của thành phần Qsys, trong khi các Giao diện Avalon được thành phần sử dụng để giao tiếp với các mô-đun phần cứng bên ngoài thành phần

Các loại giao diện Avalon:

• Avalon Clock Interface – an interface that drives or receives clocks

• Avalon Reset Interface – an interface that provides reset capability

• Avalon Memory-Mapped Interface (Avalon MM) – an address-based read/write interface which is typical of master-slave connections

• Avalon Streaming Interface (Avalon-ST) – an interface that supports unidirectional flow of data

• Avalon Conduit Interface – an interface that accommodates individual signals or groups of signals that do not fit into any of the other Avalon Interface types You can export the conduit signals to make connections external to the Qsys system

2.3 Project GHRD (Golden Hardware Reference Design)

Golden Hardware Reference Design sử dụng các ngoại vi trong vùng FPGA một cách tối thiểu vì phía HPS đã cung cấp cho ta rất nhiều lựa chọn các ngoại vi như Ethernet, UART, SDRAM, SD/MMC Các giao tiếp HPS-FPGA và FPGA-HPS được cấu hình với độ rộng dữ liệu là 64 bit Thiết kế GHRD này bao gồm các thành phần như sau:

• 64KB of on-chip memory

• JTAG to Avalon master bridges

• Interrupt capturer for use with System Console

Thiết kế trên sử dụng cầu nối HPS-FPGA, FPGA-HPS và Lightweight HPS-FPGA, đồng thời, cấu trúc này cho thấy những ngoại vị được hỗ trợ trong mỗi phần FPGA và phần HPS như JTAG, Interrupt, ROM, RAM, DDR, …

Các thành phần IP trong project GHRD:

Hình 9 Hình ảnh mô tả cấu trúc GHRD cung cấp từ terrasic

HPS viết tắt từ Hard Processing System, đây là hệ thống xử lý của SoC Altera Hệ thống xử lý này bao gồm các vi xử lý ARM và các ngoại vi đi kèm Vi xử lý ARM trên SoC của Cyclone 5 là một cặp ARM Cortex-9 Ngoài MPU Subsystem của ARM Cortex-9, HPS còn bao gồm các ngoại vi khác như PLLs, bộ điều khiển Flash Controllers, SDRAM Controllers, bộ nhớ on-chip, v.v

Chức năng các Bridge trong HPS:

• Lightweight HPS-to-FPGA Bridge:Cho phép master từ HPS truy cập đến slave ánh xạ bộ nhớ các thành phần ở FPGA.Thông thường MPU ở HPS truy cập cầu nối này thực hiện các truy cập vào thanh ghi trạng thái và điều khiển tới các ngoại vi trong FPGA.Lưu ý : không sử dụng cầu này để truy cập vào memory FPGA

• HPS- to -FPGA Bridge: sử dụng để kết nối trực tiếp bộ nhớ của FPGA đến HPS Lưu ý: truy cập thanh ghi trạng thái và điều khiển của FPGA không được sử dụng ở cầu này và sẽ được chuyển đến sử dụng ở Lightweight HPSto-FPGA Bridge

• FPGA- to – HPS Bridge: cho phép master từ FPGA truy cập vào bộ nhớ và ngoại vi bên trong HPS

2.3.2 System ID Peripheral Intel FPGA IP

Lõi ID hệ thống với giao diện Avalon® là một thiết bị chỉ đọc đơn giản cung cấp cho các hệ thống Trình thiết kế nền tảng một mã định danh duy nhất Các hệ thống bộ xử lý sử dụng lõi ID hệ thống để xác minh rằng chương trình thực thi được biên dịch nhằm mục tiêu vào phần cứng thực được định cấu hình trong FPGA đích Nếu ID dự kiến trong tệp thực thi không khớp với lõi ID hệ thống trong FPGA, có thể phần mềm sẽ không thực thi chính xác

Có hai cách cơ bản để sử dụng lõi ID hệ thống:

• Xác minh ID hệ thống trước khi tải phần mềm mới xuống hệ thống Phương pháp này được sử dụng bởi các công cụ phát triển phần mềm, chẳng hạn như môi trường phát triển tích hợp Nios® II (IDE), Nios® II IDE kiểm tra xem lõi ID hệ thống trong phần cứng có khớp với ID hệ thống dự kiến của phần mềm hay không trước khi tải xuống chương trình để chạy hoặc gỡ lỗi

• Kiểm tra ID hệ thống sau khi đặt lại Nếu một chương trình đang chạy trên phần cứng không phải là hệ thống Trình thiết kế nền tảng dự kiến, chương trình có thể không hoạt động hoàn toàn Nếu chương trình không gặp sự cố, nó có thể hoạt động sai theo những cách tinh vi khó gỡ lỗi Để tránh trường hợp này, một chương trình có thể so sánh ID hệ thống dự kiến với lõi ID hệ thống và báo lỗi nếu chúng không khớp

Trong project GHDR: đóng vai trò Kiểm tra, xác minh ID cho hệ thống tránh thực hiện sai khó gỡ lỗi khi sai ID hệ thống

2.3.3 JTAG to Avalon Master Bridge

Cung cấp kết nối, quyền truy cập giữa hệ thống máy chủ để truy cập các IP được ánh xạ bộ nhớ và các thanh ghi trạng thái và điều khiển IP ngoại vi thông qua giao diện JTAG Trong Project GHDR đóng vai trò các khối:

Thực hiện chèn một đoạn thanh ghi giữa các đoạn phản hồi và các lệnh ánh xạ đến bộ nhớ Avalon IP này thực hiện chức năng pipeline, phân phối dữ liệu các tín hiệu câu lệnh từ bộ xử lý và tín hiệu phản hồi từ các component Ở đây tham số chờ xử lý tối đa là số lần đọc và phản hồi đang chờ xử lý được đưa vào hàng đợi, hàng đợi tối đa là 64

Trong project GHDR: dùng IP này đặt với tên mm – bridge với chức năng làm cầu nối để HPS truy cập vào gửi tín hiệu điều khiển ánh xạ đến bộ nhớ các thành phần FPGA

2.3.5 JTAG UART Intel FPGA IP

Tìm hiểu về giải thuật Haar Cascade

Haar Cascade là một thuật toán được tạo ra dựa trên những tính năng phát hiện đối tượng (có thể là khuôn mặt, mắt, tay, đồ vật, …) Triển khai ban đầu được sử dụng để phát hiện khuôn mặt chính diện và các đặc điểm như Mắt, Mũi và Miệng Hay nói cách khác Haar Cascade là một lớp model có thể giúp chúng ta nhận diện khuôn mặt (Haar Cascade face detection), Haar Cascade sử dụng các tầng Haar và sau đó sử dụng thật nhiều đặc trưng đó qua nhiều lượt (Cascade) và tạo thành một cỗ máy nhận diện khuôn mặt hoàn chỉnh

3.2 Đặc trưng giải thuật Haar Cascade

Haar Cascade sử dụng các đặc điểm hình chữ nhật để xử lý hình ảnh và phát hiện khuôn mặt Các đặc điểm hình chữ nhật tương tự như nhân được sử dụng để phát hiện các đặc điểm khác nhau của khuôn mặt như mắt và các nốt như trong hình minh họa bên dưới

Hình 10 Ba loại bộ lọc theo hình chữ nhật

Các tính năng hình chữ nhật được chạy lần lượt trên hình ảnh và tổng số pixel nằm trong phần màu trắng được trừ cho tổng số pixel nằm trong phần màu đen

Trong đó: a) Là các bộ lọc bắt các cạnh trong ảnh b) Bắt các đường thẳng trong ảnh c) Về đặc trưng 4 hình vuông

Trong hình minh họa bên dưới, đặc điểm hình chữ nhật đầu tiên đang tính toán cho sự khác biệt về cường độ giữa vùng mắt và vùng má trên khuôn mặt Và đặc điểm hình chữ nhật thứ hai là đo sự chênh lệch về cường độ giữa hai vùng mắt và sống mũi Bộ lọc Haar chỉ có thể nhìn cụ thể vào một vùng trong cửa sổ để nhận diện

Hình 11 Nhận diện khuôn mặt bằng ba loại bộ lọc

Vì vậy, sử dụng các đặc điểm hình chữ nhật này trên một hình ảnh, ta có thể tạo ra hàng nghìn điểm đặc trưng cho hình ảnh Tuy nhiên, việc tính toán tổng số pixel trong các vùng trắng và đen trong toàn bộ ảnh có thể là một hoạt động tốn kém, đặc biệt là đối với các ảnh lớn

3.3 Hoạt động của giải thuật Haar Cascade

Hình 12 Quy trình hoạt động giải thuật Haar Cascade

Bước 1: Sau khi ảnh đầu vào được gửi qua bộ phân loại, sau đó ảnh được chia thành các phần nhỏ (hoặc các cửa sổ con như trong hình minh họa)

Bước 2: Sau đó cho các phần nhỏ qua các stage từ 1 đến n, trong đó mỗi bộ phát hiện sự kết hợp của các loại đặc trưng khác nhau từ các hình ảnh (ví dụ: đường thẳng, cạnh, hình tròn, hình vuông) được truyền qua

Bước 3: Hình ảnh (hoặc hình ảnh phụ) có độ tin cậy cao nhất được phát hiện dưới dạng khuôn mặt và được gửi đến bộ tích lũy trong khi phần còn lại bị loại bỏ khỏi khung hình Do đó, Cascade tìm nạp khung hình/hình ảnh tiếp theo nếu còn lại và bắt đầu lại quá trình.

THIẾT KẾ VÀ THỰC HIỆN PHẦN CỨNG

Yêu cầu thiết kế

Đề tài lần này yêu cầu một phần cứng có chức năng thực hiện nhận, xử lý và xuất ảnh Để thực hiện được các chức năng này thì các module cần có như sau: o Cần một IP HPS để xử lý dữ liệu o Các bộ giao tiếp master để đọc/ghi dữ liệu đến vùng nhớ o Kết nối với bộ IP VGA để xuất hình ảnh sau khi xử lý ra màn hình.

Phân tích thiết kế

Trong đề tài này, được thực hiện dựa trên thiết kế GHRD cung cấp từ intel Em thực hiện tìm hiểu thiết kế đã đề cập ở phần 2.2 và từ đó kết nối thêm các IP liên quan đến VGA để có thể xuất hình ảnh ra màn hình

Hình 13 Thành Phần IP sử dụng trong hệ thống Qsys cấu hình thêm VGA vào project GHRD

❖ Chức năng các khối IP liên quan đến VGA:

Frame Buffer: Lõi IP Frame Buffer đệm các khung hình video vào RAM bên ngoài, cung cấp các tính năng sau:

• Bộ đệm các trường video liên tục và xen kẽ

• Hỗ trợ bộ đệm đôi và ba với nhiều tùy chọn giảm khung hình và lặp đi lặp lại

• Hỗ trợ tối đa 8pixel mỗi lần truyền

• Hỗ trợ bù giữa các bộ đệm có thể định cấu hình để cho phép xen kẽ tốt nhất các ngân hàng DDR để đạt hiệu quả tối đa

• Hỗ trợ độ trễ bộ đệm biến đổi được kiểm soát thời gian biên dịch hoặc thời gian chạy lên tới 4.095 khung hình

• Hỗ trợ chế độ chỉ đọc hoặc chỉ ghi

Lõi IP Frame Buffer II có hai khối cơ bản:

• Writer — lưu trữ các điểm ảnh đầu vào trong bộ nhớ

• Reader — lấy các khung hình video từ bộ nhớ và tạo chúng dưới dạng đầu ra

Clocked Video Output Intel FPGA IP:

IP cho phép chuyển đổi dữ liệu từ giao thức video phát trực tuyến Avalon được kiểm soát theo luồng thành video có xung nhịp.Đồng thời tạo thông tin đồng bộ bằng cách sử dụng điều khiển video phát trực tuyến Avalon và các gói hình ảnh đang hoạt động Còn cho phép tạo các định dạng video chạy ở các tần số khác nhau từ hệ thống.

Thực hiện phần cứng

Khi đã có được mô hình GHRD và kết nối IP VGA vào, ta thực hiện phần cứng bằng công cụ Quartus của Intel để đổ chương trình xuống kit DE10-Standard Đặc biệt, ở mục này, ta sử dụng mô hình GHRD với các IP mẫu cần có cho các kết nối giữa khối VGA, HPS, nguồn clock, … Ngoài ra, các bước cần có để thực hiện một phần cứng có khả năng đổ lên board và giao tiếp được với vi xử lý là cấu hình hệ thống FPGA thông qua các kết nối trên Qsys và biên dịch hệ thống FPGA thông qua tool Quartus bản 16.1

3.1 Cấu hình hệ thống Qsys

Các kết nối trong hệ thống mô hình tham khảo (GHRD) của Altera được thể hiện qua Hình 11 thông qua Tools > Qsys

Hình 14 Các kết nối của project GHRD trong Qsys

Khi đã cấu hình được các kết nối trong phần cứng, ta có thể tạo ra file sopcinfo theo trình tự Generate Generate HDL File sopcinfo được board sử dụng để định địa chỉ, các kết nối và độ rộng bit của dữ liệu các khối bên trong phần cứng

Hình 18 Sau khi generate file sopcinfo

Ngoài ra, để có file header của HPS được sử dụng trong thiết kế phần mềm, ta cần thực hiện một file script tại project DE10_Standard_GHRD có nội dung như Hình 16, với PATH là đường dẫn trỏ tới mục bin của Quartus Sau khi hoàn thành, cần bật tool SoC EDS, trỏ đến đường dẫn chứa script và thực hiện lệnh /generate_hps_qsys_header.sh

Hình 19 Nội dung script tạo header cho HPS trong Qsys

Hình 20 Quá trình chạy script

Hình 21 Sau khi generate file header

Hình 22 Nội dung file hps_0.h vừa tạo

3.2 Biên dịch Để hệ thống FPGA có thể được nạp lên board DE10-Standard nhằm hiện thực hóa hệ thống, cần biên dịch (compile) hệ thống bằng Start Compilation

Hình 23 Quá trình biên dịch hệ thống FPGA

Hình 24 Quá trình biên dịch hệ thống FPGA

Hình 25 Quá trình biên dịch hệ thống FPGA Ở đề tài này, sau khi biên dịch thì hệ thống FPGA đã tiêu tốn các loại tài nguyên phần cứng bao gồm các module logic có thể lập trình được (ALM), bộ xử lý tín hiệu số (DSP), các khối RAM, bộ nhớ on-chip, vòng khóa pha (PLL) và vòng khóa độ trễ (DLL) theo Bảng 3

Bảng 3 Tài nguyên hệ thống FPGA tiêu tốn

Loại tài nguyên Giải thuật đề nghị Tài nguyên của Cyclone V

Ngoài ra, sau khi Compile thì hệ thống sẽ xuất file sof File này được dùng để nạp hệ thống phần cứng lên board

Hình 26 File sof được tạo sau quá trình biên dịc

THIẾT KẾ VÀ THỰC HIỆN PHẦN MỀM (NẾU CÓ)

Thiết kế phần mềm

Thông qua việc thực hiện hệ thống FPGA, ta có code C/C++ để điều khiển vi xử lý ARM Ngoài ba chức năng chính đã nêu ra ở phần yêu cầu thiết kế thì chương trình phần mềm cần phải được thực hiện theo quy trình như sau:

• Đọc ảnh đầu vào từ camera

• Chuyển từ ảnh màu sang ảnh xám và cân bằng sáng

• Phát hiện khuôn mặt, đôi mắt và khoanh vùng dữ liệu

• Trả kết quả nhận diện

Lưu đồ chương trình phần mềm chính được chú thích như Hình 4.4 đại diện cho hoạt động của hệ thống trong suốt quá trình từ nhận diện khuôn mặt đến việc trả kết quả nhận diện

Hình 27 Lưu đồ phần mềm nhận diện khuôn mặt thực hiện trên vi xử lý ARM

Giải thích lưu đồ: Đầu tiên sau khi nhận ảnh từ đầu vào ảnh sẽ được chuyển về dạng frame, từ đó dùng hàm trong thư viện open cv chuyển ảnh màu sang ảnh xám để tăng tính xác của hình Sau đó kiểm tra xem trong khung hình có khuôn mặt người không, nếu không thì hiển thị hình ảnh ra màn hình hình ảnh từ camera, còn nếu có tiếp tục kiểm tra xem bêntrong có 2 mắt người không, nếu không thì hiển thị hình ảnh ra màn hình hình ảnh từ camera và kèm theo khung khoanh vùng mặt, còn nếu đều thõa mãn hiển thị hình ảnh ra camera và khung tròn khoanh vùng mặt và mắt Khi đã hiển thị lên màn hình sẽ kiểm tra có nhấn nút esc không để kết thúc quá trình thực hiện nếu không sẽ quay lại thực hiện lại quá trình

Ngoài ra, nhờ những định hướng của đề tài, việc phân chia cấu trúc chương trình phần mềm theo mục đích sử dụng với module objectDetection và giải thuật Haar Cascade được khai thác bởi OpenCV Quá trình thực hiện phần mềm diễn ra trên môi trường Linux được khởi tạo ở V (1.1)

KẾT QUẢ THỰC HIỆN

Khởi tạo hệ thống SoC

1.1 Khởi tạo môi trường linux trên board

Việc tạo môi trường trên board là vô cùng cần thiết để hiện thực một dự án SoC lên board FPGA vì khi có môi trường thì việc giao tiếp giữa người dùng với board sẽ dễ dàng hơn Một lưu ý nhỏ rằng bước này có thể thực hiện trước hoặc sau khi nạp code phần cứng lên board nhưng bắt buộc phải trước khi thiết lập các kết nối trên board

Bước đầu tiên để tạo môi trường cho board, cần chuẩn bị một thẻ nhớ microSD và format bằng phần mềm SD Card Formatter Tiếp theo là burn hệ điều hành vào thẻ SD trên bằng phần mềm Win32 Disk Imager Ở đây, chọn file với tên là DE10_Standard_LXDE.img như Hình 25; với DE10_Standard_LXDE.img được tải từ trang của nhà sản xuất Terasic Sau khi burn hệ điều hành, ta gắn thẻ nhớ SD vào board và bật nguồn

Hình 28 Phần mềm format thẻ nhớ

Sau đó thực hiện cấu hình thẻ SD sử dụng được cho kit de10 bằng ứng dụng Win32DiskImager

Hình 29 Các bước khởi tạo môi trường Linux

Sau khi nhấn Write, quá trình hoàn tất trong thẻ SD xuất hiện các file như sau:

Hình 30 Các bước khởi tạo môi trường Linux

1.2 Thiết lập kết nối máy tính với board

Khi đã có môi trường Linux trên board, ta cần kết nối board với laptop thông qua cổng UART to USB để thực hiện một số các phép điều khiển

Hình 31 Các bước thiết lập kết nối máy tính tới board

Kết nối kit với laptop thông qua cổng UART to USB

Bật phần mềm PuTTy và cấu hình cho serial 115200 baudrate, no parity, 1 stop bit

Hình 32 Các bước thiết lập kết nối máy tính tới board Để vào được root của DE10_Standard board nhập root Password nhập: nhấn enter

Hình 33 Các bước thiết lập kết nối máy tính tới board

Tiếp đến, ta tạo 1 folder làm việc mới, ta nhập lệnh: mkdir /mnt/FAT Để truy cập vào thư mục mới vừa tạo, ta nhập lệnh: cd /mnt/FAT

Hình 34 Các bước thiết lập kết nối máy tính tới board

Truy cập vào vùng nhớ dev để xem danh sách và tìm vùng nhớ để sử dụng:

Hình 35 Các bước thiết lập kết nối máy tính tới board

Gán vùng nhớ trên thẻ nhớ vào một vùng nhớ có sẵn trên board bằng lệnh: mount /dev/mmcblk0p1 /mnt/FAT

Sau đó truy cập lại vào /mnt/FAT và kiểm tra các file trên thể SD đã được gán chưa

Hình 36 Các bước thiết lập kết nối máy tính tới board

Thực hiện copy folder OpenCV vào mục /home/root sử dụng lệnh: cp -r OpenCV /home/root/

Sau đó quay lại root để kiểm tra folder đã được copy chưa

Hình 37 Các bước thiết lập kết nối máy tính tới board

Màn hình hiển thị đã copy file OpenCV ra /home/root/ thành công

Hình 38 Các bước thiết lập kết nối máy tính tới board

Vận hành hệ thống SoC

2.1 Vận hành phần cứng Để vận hành phần cứng trên board, việc nạp các file sopcinfo, rbf và dtb vào phân vùng boot của board và thực hiện đổ file sof thông qua USB BLASTER là cần thiết Thường thì các project trên FPGA sau khi biên dịch sẽ tạo ra file sof để nạp vào kit qua JTAG-UART port thông qua Programmer Device Nhưng ở project này, vi xử lý ARM (HPS) lại cần file .rbf để boot hệ thống trên kit thông qua SD card Ta có thể convert từ file sof sang rbf (Raw Binary File) để nhúng vào hệ thống boot của board Việc convert file thông qua script sof_to_rbf.bat nằm trong mục output_files của project Để thực hiện tạo file rbf, ta sử dụng tool SoC EDS và chạy hàm /sof_to_rbf.bat tại đường dẫn này

Hình 39 Vị trí của script tạo file rbf

Hình 40 Nội dung của script tạo file rbf

Hình 41 Quá trình chạy script tạo file rbf

Hình 42 File rbf sau khi được tạo

Còn về file dtb, ta sử dụng file soc_system_board_info.xml từ nhà sản xuất để tạo ra file dtb với hàm sau trên tool SoC EDS: sopc2dts -i soc_system.sopcinfo -o soc_system.dtb -t dtb -b soc_system_board_info.xml -b hps_common_board_info.xml –c

Hình 43 File dtb sau khi t ạo Để board DE10-Standard boot được hệ thống phần cứng đã biên dịch, ta cần copy các file soc_system.dtb, soc_system.sopcinfo và soc_system.rbf vào mục boot của thẻ nhớ, sau đó cắm vào board

Copy Makefile, OpenCV chứa file C để điều khiển ARM, các file dtb, rbf và sopcinfo sinh ra trước đó trong thư mục DE10_Standard_GHRD vào thẻ SD

Hình 44 Phân vùng boot trên thẻ nhớ

Ngoài việc copy file vào phân vùng boot, để nạp được lên board hệ thống FPGA sau khi biên dịch project DE10_Standard_GHRD, ta thực hiện kết nối cổng BLASTER của kit với laptop và nạp hệ thống đó (.sof) thông qua Program Device trên Quartus

Hình 45 Kết nối trên board

Hình 46 Các bước nạp phần cứng lên board

Hình 47 Các bước nạp phần cứng lên board

Tiếp theo, nhấn Hardware Setup để chọn BLASTER USB của DE10 và Close Kế tiếp, chọn Auto Detect để lựa chọn mã thiết bị, “5CSXFC6D6” đối với DE10- Standard Sau đó, màn hình sẽ hiện hai thành phần bên trong Cyclone V là HPS và FPGA

Hình 48 Các bước nạp phần cứng lên board

Tiếp theo, nhấn chuột phải vào Device có tên “5CSXFC6D6” và Change File Tại giao diện chọn file nạp, chọn file sof như sau rồi nhấn Start Nếu thanh Progress báo 100% (Successful) thì việc nạp thiết kế phần cứng lên board đã thành công

Hình 49 Các bước nạp phần cứng lên board

2.2 Vận hành phần mềm Để vận hành được phần mềm cần đảm bảo thực hiện đúng và đẩy đủ qui trình như bên dưới

2.2.1 Đảm bảo đầy đủ các file cần thiết

Trước tiên, ta phải chắc chắn các file phần mềm cần thiết cho đề tài đã được khởi tạo đầy đủ vào môi trường Linux đã khởi tạo Cụ thể, các định dạng chúng ta cần như sau: các file vận hành/điều khiển phần cứng (.cpp), các file trọng số chứa giải thuật để nạp vào hệ thống FPGA thực hiện nhận diện khuôn mặt

Hình 50 Các bước vận hành phần mềm trong hệ thống SoC

Nội dung của file Makefile, chứa các câu lệnh để biên dịch code C sang file thực thi được chú thích như hình bên dưới

Hình 51 Nội dung file Makefile

Trong đề tài này, ta cần phải có thư viện OpenCV mới có thể chạy được và nội dung của file code C cũng phải include thư viện OpenCV vào

Hình 52 Include thư viện OpenCV

Ngoài ra, để cài đặt OpenCV ta sử dụng các lệnh sau:

Sau khi cài đặt xong thì dùng câu lệnh pkg-config –modervision opencv để xem version của thư viện OpenCV:

Hình 53 Version của OpenCV Để xem đường dẫn và chứa thư viện OpenCV để người dùng có thể include thư viện vào ta sử dụng câu lệnh pkg-config —cflags opencv và pkg-config —-libs opencv:

Hình 54 Thư mục chứa thư viện của OpenCV

2.2.4 GNU Toolchain Để có thể chạy được đề tài này, ta cần phải có file thực thi để chạy được trên môi trường Linux Để có thể biên dịch từ file code C sang file thực thi để chạy được trên môi trường Linux, ta có thể kết nối giữa máy tính với Board thông qua phần mềm puTTy Đồng thời, ARM Cortex-A9 cũng đóng vai trò là GNU Toolchain biên dịch từ file code C sang file thực thi

Mở puTTy vào thư mục OpenCV/face_detection Trên giao diện Terminal, dùng lệnh make để hệ thống biên dịch và xuất file thực thi

Hình 55 Các bước vận hành phần mềm trong hệ thống SoC

Sau khi chạy lệnh make ta được file thực thi như hình sau:

Hình 56 Các bước vận hành phần mềm trong hệ thống SoC

Việc thực hiện demo nhằm mục đích kiểm chứng lại giải thuật phần cứng lẫn phần mềm có hoạt động được hay không Tiếp đến, để chạy được demo, ta cần lắp đặt kit với các thiết bị gồm màn hình, chuột, bàn phím và camera; sau khi khởi động, giao diện trên màn hình hiển thị như Hình 56

Hình 57 Quá trình thực hiện demo

Tiếp theo, bật file objectDetection2 trong /home/root/ (đã thực hiện ở mục 5.2.2) và chọn Execute in Terminal

Hình 58 Các bước vận hành phần mềm trong hệ thống SoC

Ta được kết quả như hình bên dưới:

Hình 59 Kết quả quá trình thực hiện demo

Khi chạy chương trình, hình ảnh được hệ thống FPGA xử lý, khi nhận diện được khuôn mặt thì FPS sẽ giảm xuống 5 FPS so với khi không nhận diện là 8 FPS Để tính FPS của giải thuật Haar Cascade bằng cách sử dụng thư viện OpenCV, ta sử dụng hàm cv2.getTickCount() để đo thời gian xử lý của giải thuật trên một tập dữ liệu ảnh Sau đó, bạn có thể sử dụng hàm cv2.getTickFrequency() để lấy tần số của bộ đếm Cuối cùng, bạn có thể tính FPS bằng cách chia tần số cho thời gian xử lý

Ngày đăng: 10/04/2024, 22:15

TỪ KHÓA LIÊN QUAN

w