Một chiếc Raspberry Pi gắn micro ngoài cửa sổ có thể nghe, ghi lại và gọi tên từng loài chim quanh nhà. Đó là việc của BirdNET-Pi: phần mềm mã nguồn mở biến Pi thành trạm quan sát âm thanh chạy 24/7, tự cắt âm thanh thành từng đoạn ngắn, chạy mô hình BirdNET để nhận diện loài, rồi hiển thị toàn bộ kết quả trên một giao diện web.

Mô hình BirdNET do Cornell Lab of Ornithology và Đại học Kỹ thuật Chemnitz phối hợp phát triển, huấn luyện trên hàng nghìn loài chim và được cập nhật định kỳ. BirdNET-Pi đóng gói mô hình đó cùng bộ công cụ ghi âm, phân tích, vẽ spectrogram và cơ sở dữ liệu, nên người dùng không phải cài từng thành phần.

Bài này hướng dẫn cài BirdNET-Pi trên Raspberry Pi 5 chạy Raspberry Pi OS 64-bit, từ bước ghi thẻ nhớ đến cấu hình vị trí, đặt mật khẩu quản trị và đọc kết quả. Các bước cũng đúng với Pi 4 và Pi 3, miễn là hệ điều hành 64-bit, vì BirdNET-Pi không chạy trên hệ 32-bit.

Cần chuẩn bị gì

BirdNET-Pi cần một board 64-bit, một micro gắn ngoài và nguồn điện ổn định. Danh sách dưới đây là cấu hình đã dùng để thử nghiệm, có thể thay bằng thiết bị tương đương:

  • Raspberry Pi 5 (hoặc Pi 4, Pi 3 đều được, miễn chạy hệ điều hành 64-bit). Pi 5 phân tích nhanh hơn nên phù hợp nếu muốn chạy thêm dịch vụ khác.
  • Thẻ nhớ microSD 64GB trở lên, ưu tiên loại endurance vì phần mềm ghi âm liên tục. Ghi 24/7 trên thẻ rẻ tiền sẽ hỏng thẻ rất nhanh.
  • Nguồn chính hãng 27W cho Pi 5. Nguồn yếu gây lỗi ngẫu nhiên khó lần, nhất là khi cắm thêm micro USB.
  • Cáp mạng nếu trạm đặt xa router. Wi-Fi dùng được, nhưng mạng dây ổn định hơn cho một thiết bị chạy liên tục.
  • Micro USB hoặc USB sound card kèm micro electret. Micro phải đặt ngoài trời mới thu được tiếng chim rõ.
  • Vỏ hoặc hộp chống nước cho Pi và micro, kèm lưới chắn côn trùng.
  • Tuỳ chọn: SSD USB nếu muốn lưu dữ liệu lâu dài mà không lo mòn thẻ.

Hai điểm dễ bỏ qua khi chuẩn bị. Thứ nhất, micro càng gần nguồn ồn thì càng nhiều kết quả sai: điều hoà, quạt gió, đường lớn đều tạo âm thanh giống tiếng chim ở dải tần thấp. Thứ hai, dung lượng lưu không cố định: mỗi đoạn ghi 15 giây ở 48kHz mono chiếm khoảng 1,4MB, cộng spectrogram và bản chuyển đổi, nên một trạm chạy vài tháng sẽ ngốn hàng chục GB nếu không giới hạn.

Chuẩn bị Raspberry Pi OS 64-bit

BirdNET-Pi được thiết kế để chạy trên một bản cài mới, 64-bit, không có dịch vụ lạ tranh cổng 80. Nếu Pi đang dùng cho việc khác, nên dành riêng một thẻ cho trạm nghe chim.

Bước 1. Dùng Raspberry Pi Imager ghi Raspberry Pi OS bản 64-bit (Bookworm hoặc Trixie). Trong phần tuỳ chọn nâng cao của Imager, bật SSH và nhập sẵn tên đăng nhập để chạy headless, không cần cắm màn hình.

Bước 2. Cập nhật hệ thống trước khi cài bất cứ thứ gì:

sudo apt update
sudo apt upgrade -y

Bước 3. Cài curl, gói cần thiết để tải bộ cài:

sudo apt install curl

Bước 4. Đặt địa chỉ IP cố định cho Pi. Cách gọn nhất là tạo DHCP reservation trên router, giữ nguyên cấu hình mạng của Pi. Địa chỉ cố định giúp bạn mở giao diện web bằng một URL quen thuộc và giữ nguyên đường dẫn khi chia sẻ dữ liệu lên bản đồ BirdWeather.

Cài BirdNET-Pi bằng một lệnh

Bộ cài của BirdNET-Pi lo toàn bộ phần khó: kiểm tra hệ điều hành 64-bit, cài git, tải mã nguồn, cài các dịch vụ ghi âm và phân tích, tải mô hình BirdNET rồi đăng ký chúng với systemd để tự chạy khi khởi động.

curl -s https://raw.githubusercontent.com/Nachtzuster/BirdNET-Pi/main/newinstaller.sh | bash

Quá trình này mất khoảng 20 đến 40 phút tuỳ tốc độ mạng và tốc độ thẻ nhớ, phần lớn thời gian dành cho việc tải mô hình và biên dịch vài gói phụ thuộc. Pi sẽ tự khởi động lại khi xong. Nếu thấy màn hình dừng ở một dòng log rất lâu, cứ để yên: bộ cài vẫn đang chạy, ngắt giữa chừng sẽ phải làm lại từ đầu.

Script trên lấy từ nhánh Nachtzuster/BirdNET-Pi, bản fork đang được duy trì sau khi kho gốc của tác giả đầu tiên dừng cập nhật. Không trộn script cài của hai kho khác nhau, vì cấu trúc thư mục và tên dịch vụ đã thay đổi giữa các bản.

Sau khi BirdNET-Pi khởi động lại Pi, lấy địa chỉ IP bằng lệnh:

hostname -I

Lệnh trả về một hoặc vài địa chỉ; dùng địa chỉ trong dải mạng LAN của bạn, thường bắt đầu bằng 192.168 hoặc 10.

Mở giao diện web và kiểm tra micro

Mở trình duyệt trên máy tính cùng mạng và truy cập địa chỉ của Pi, không cần thêm cổng vì BirdNET-Pi chạy ở cổng 80 mặc định:

http://192.168.1.50

Thay địa chỉ trên bằng IP thật của bạn. Trang đầu hiển thị bảng thống kê bên trái (tổng số lần nhận diện, số loài trong ngày), biểu đồ phân bố theo giờ ở giữa và lần nhận diện gần nhất kèm spectrogram ở dưới. Nếu micro đã cắm trước khi cài, BirdNET-Pi tự chọn thiết bị ghi và bắt đầu phân tích ngay, không cần bấm nút nào.

Giao diện BirdNET-Pi hiển thị thống kê loài chim đã nhận diện trong ngày
Trang tổng quan của BirdNET-Pi: số lần nhận diện, số loài trong ngày và biểu đồ hoạt động theo giờ.

BirdNET-Pi mới cài thường để trống trang trong 10 đến 15 phút đầu vì hệ thống phải ghi đủ đoạn âm thanh rồi mới phân tích. Nếu sau khoảng đó vẫn không có kết quả, kiểm tra xem Pi có nhận micro hay không:

arecord -l

Lệnh liệt kê các thiết bị ghi âm mà BirdNET-Pi có thể dùng. Không thấy card nào nghĩa là micro chưa được nhận ở mức hệ điều hành, và mọi cấu hình phía trên đều vô nghĩa. Với sound card USB rời, cắm lại sau khi Pi đã khởi động xong rồi chạy lại lệnh này.

Cấu hình vị trí, BirdWeather và mật khẩu

Mọi thứ cần chỉnh trong BirdNET-Pi đều nằm trong mục Tools ở góc phải trên của giao diện. Lần đầu bấm vào, trang sẽ hỏi đăng nhập: tên đăng nhập là birdnet, mật khẩu để trống.

Trang đăng nhập BirdNET-Pi với tên đăng nhập birdnet
Trang đăng nhập mặc định: user birdnet, mật khẩu để trống.

Trong BirdNET-Pi, vào Tools rồi chọn Settings. Trường quan trọng nhất là Latitude và Longitude, nhập tới 4 chữ số thập phân. Mô hình BirdNET dùng toạ độ để lọc danh sách loài theo vùng địa lý và theo mùa, nên sai vị trí sẽ ra những loài chưa từng xuất hiện ở Việt Nam. Cách lấy nhanh: mở Google Maps, nhấp chuột phải đúng vị trí đặt trạm, toạ độ hiện ngay trong menu.

Cùng trang đó có ô BirdWeather Token. Đây là dịch vụ bản đồ âm thanh chim toàn cầu: nếu dán token, mọi đoạn ghi có nhận diện sẽ được đẩy lên bản đồ công khai, người khác xem được khu vực bạn ở đang có loài nào. Token lấy miễn phí tại app.birdweather.com sau khi tạo tài khoản. Không muốn chia sẻ dữ liệu thì để trống, phần mềm vẫn chạy bình thường.

Trang Settings của BirdNET-Pi với ô Latitude, Longitude và BirdWeather Token
Nhập Latitude, Longitude chính xác và dán token BirdWeather nếu muốn chia sẻ dữ liệu.

Cuộn xuống cuối trang và bấm Update Settings để BirdNET-Pi ghi lại cấu hình. Bước này bắt buộc, nhiều người nhập xong rồi đóng tab và tưởng đã lưu.

Việc tiếp theo là đặt mật khẩu quản trị cho BirdNET-Pi. Mặc định ai vào được giao diện web cũng đăng nhập được bằng user birdnet với mật khẩu rỗng, tức là họ đổi được cấu hình, xoá dữ liệu hoặc trỏ trạm sang nơi khác. Vào lại Settings, cuộn xuống cuối, bấm Advanced Settings, nhập mật khẩu mới rồi bấm Update Settings.

Ô Password trong trang Advanced Settings của BirdNET-Pi
Mật khẩu quản trị chỉ nhận chữ và số, không dùng ký tự đặc biệt.

Mật khẩu này chỉ dùng chữ cái và chữ số, không có ký tự đặc biệt. Nếu đặt mật khẩu có dấu chấm hay gạch ngang, trang sẽ báo lỗi hoặc lưu sai, lần sau không đăng nhập được.

Đọc kết quả và spectrogram

Trang Spectrogram là nơi kiểm tra kết quả có đáng tin hay không. Trục ngang là 15 giây của đoạn ghi, trục dọc là tần số tính bằng kHz, vùng sáng là năng lượng âm thanh. Chim hót thường để lại những vệt cong hoặc chuỗi xung ở dải 1 đến 8kHz, trong khi tiếng động cơ là dải nền đều đặn ở tần số thấp.

Spectrogram BirdNET-Pi hiển thị tần số và tên loài chim nhận diện được
Spectrogram 15 giây với nhãn loài và độ tin cậy do mô hình gán cho từng đoạn.

Mỗi nhận diện của BirdNET-Pi đi kèm độ tin cậy. Ngưỡng mặc định thường là 0,7: mô hình chỉ ghi nhận khi đã chắc 70%. Trạm đặt nơi yên tĩnh có thể giữ nguyên, còn nơi nhiều tạp âm thì nên nâng lên 0,8 hoặc 0,85 để giảm kết quả sai, đổi lại sẽ bỏ sót vài lần hót ngắn.

BirdNET-Pi lưu dữ liệu trong thư mục BirdSongs của tài khoản cài đặt: file âm thanh, ảnh spectrogram và cơ sở dữ liệu SQLite Birds.db. Muốn giữ lịch sử lâu, sao lưu định kỳ file cơ sở dữ liệu này; muốn xem lại toàn bộ, dùng mục Recordings và Best Recordings trên web.

Mẹo chạy trạm ngoài trời

Đặt micro đúng cách. Micro cách mặt đất 1,5 đến 3m, hướng ngang ra khoảng trống, tránh tường phản xạ. Thêm miếng xốp chắn gió: chỉ một cơn gió nhẹ cũng tạo ra dải tần giả khiến mô hình nhận nhầm thành tiếng chim.

Che mưa nhưng không bịt tiếng. Pi và nguồn phải nằm trong hộp kín, còn micro cần đường thoát âm. Cách làm phổ biến là khoan lỗ nhỏ phía dưới hộp, dán lưới chống muỗi và đặt micro ngay sau lưới.

Chống mất điện. Một lần mất điện đúng lúc Pi đang ghi có thể làm hỏng phân vùng thẻ nhớ. Nếu trạm đặt ở vị trí khó tiếp cận, thêm bộ lưu điện nhỏ hoặc dùng nguồn PoE có bảo vệ.

Giới hạn dung lượng. Cấu hình BirdNET-Pi nằm trong /etc/birdnet/birdnet.conf, có các tuỳ chọn về dung lượng lưu và cách xoá bản ghi cũ. Đặt mức hợp lý ngay từ đầu, đừng để thẻ đầy rồi mới xử lý, vì khi đầy Pi có thể treo cả giao diện web.

Theo dõi nhiệt độ. Pi 5 chạy liên tục trong hộp kín rất nóng. Nên có tản nhiệt chủ động và đặt hộp ở nơi râm mát, tránh ánh nắng chiếu trực tiếp.

Cập nhật có kế hoạch. Trước khi cập nhật phần mềm, sao lưu Birds.db và thư mục cấu hình. Bản mới đôi khi đổi cấu trúc dữ liệu, và không có bước sao lưu thì mất toàn bộ lịch sử nhận diện.

Xử lý sự cố thường gặp

Hiện tượng Nguyên nhân thường gặp Cách xử lý
Không mở được giao diện web Sai IP, hoặc dịch vụ web chưa chạy Chạy hostname -I để lấy IP đúng; kiểm tra dịch vụ web của BirdNET-Pi còn chạy không, rồi khởi động lại Pi
Không có kết quả nhận diện nào Micro chưa được chọn đúng Chạy arecord -l, chọn đúng thiết bị ghi trong Settings
Bộ cài dừng, báo lỗi 32-bit Hệ điều hành 32-bit Ghi lại Raspberry Pi OS 64-bit rồi cài lại từ đầu
Thẻ đầy, web treo Ghi âm liên tục không giới hạn Giảm dung lượng lưu trong birdnet.conf, xoá bản ghi cũ, cân nhắc SSD USB
Nhận diện sai nhiều loài Ngưỡng tin cậy thấp, tạp âm môi trường Nâng ngưỡng lên 0,8 đến 0,85; xem spectrogram để loại kết quả sai
Pi nóng, phân tích chậm Thiếu tản nhiệt, hộp kín Thêm quạt hoặc tản nhôm, đặt hộp nơi thoáng

Câu hỏi thường gặp

Có nhất thiết phải dùng Raspberry Pi 5 không?

Không. Pi 3 và Pi 4 đều chạy được nếu cài hệ điều hành 64-bit. Pi 5 phân tích nhanh hơn, phù hợp khi bạn muốn chạy thêm dịch vụ khác trên cùng máy, còn với một trạm nghe chim thuần tuý thì Pi 4 là đủ.

BirdNET-Pi có chạy được trên Pi Zero 2 W không?

Về lý thuyết là được nếu cài bản 64-bit, nhưng mô hình BirdNET chạy rất chậm trên CPU yếu, giao diện web phản hồi chậm và dễ bỏ sót đoạn ghi. Không nên dùng cho trạm chạy liên tục.

BirdNET-Pi có cần Internet không?

Chỉ cần khi cài đặt và khi muốn đẩy dữ liệu lên BirdWeather. Sau khi cài xong, toàn bộ việc ghi âm và nhận diện diễn ra tại chỗ, không phụ thuộc mạng ngoài.

Dữ liệu chim ở Việt Nam có chính xác không?

Mô hình BirdNET có dữ liệu cho khu vực Đông Nam Á, nhưng độ phủ loài bản địa không dày bằng châu Âu hay Bắc Mỹ. Sai số thường gặp là nhầm giữa các loài có tiếng hót gần giống nhau; spectrogram và việc nghe lại là cách kiểm tra nhanh nhất.

Một trạm BirdNET-Pi hoàn chỉnh gồm bốn phần: board chạy 64-bit, thẻ nhớ đủ bền, micro đặt đúng chỗ và nguồn ổn định. Khi bốn phần đó ổn, phần mềm gần như tự lo từ đầu đến cuối: tự ghi, tự phân tích, tự vẽ biểu đồ và tự đẩy dữ liệu lên bản đồ nếu bạn bật BirdWeather.

Điều đáng giá nhất không nằm ở con số loài nhận diện được trong ngày, mà ở chỗ dữ liệu tích luỹ theo mùa. Sau vài tháng, bạn có một bản ghi về loài nào đến vườn nhà vào tháng nào, giờ nào, và tiếng hót của chúng thay đổi ra sao. Đó là thứ một chiếc camera không làm được, còn một board 1,5 triệu đồng cắm micro ngoài cửa sổ thì làm được.

Nguồn: Pi My Life Up