Chương 2 CƠ SỞ LÝ THUYẾT
2.1. Công nghệ nhận diện âm thanh
2.1.1. Giới thiệu về âm thanh
2.1.2. Cách não bộ xử lý âm thanh
Não bộ chúng ta đã phát triển việc phân loại và truy cập những data trong quá khứ một cách vô cùng hiệu quả [1]. Nếu suy nghĩ theo một cách ngây ngô nhất, để nhận diện âm thanh não bộ chúng ta sẽ lấy âm thanh nghe được và so sánh với từng âm thanh đã từng nghe trước đó.
Nhưng khơng, não bộ đã xử lý bằng cách kết hợp đặc biệt của những hợp âm đã nghe được để kích hoạt một số neurons thần kinh giúp mở khóa những dữ liệu đã nghe trong quá khứ (hay còn gọi là historical data) [2].
2.1.3. Giới thiệu tổng quan về âm thanh
Như vậy làm sao máy tính ta có thể nhận diện âm thanh được như não bộ? Đó là khi ta cần tìm hiểu việc lưu trữ dữ liệu âm thanh như thế nào trên máy tính.
Âm thanh là tín hiệu liên tục, là một dạng dữ liệu phi cấu trúc trong khi đó máy tính chỉ làm việc với các con số rời rạc. Hai đặc trưng cơ bản của âm thanh là độ lớn và tần số. Độ lớn biểu thị cho năng lượng của âm thanh phát ra còn tần số càng lớn thì cao độ càng cao hay tỉ lệ rung càng cao [3].
Có một điểm đặc biệt khi não bộ nhận diện âm thanh, đó là dù cho âm thanh đó có được sử dụng bằng nhạc cụ khác như guitar hay piano thì ta vẫn nhận diện được bài hát đấy. Mỗi một nhạc cụ có sự kết hợp riêng biệt và sự biến tấu của những âm bội này tạo ra những âm thanh riêng biệt [4]. Vậy nên chúng ta có thể dễ dàng phân biệt bài hát được thực hiện bởi piano hay guitar.
Để ghi lại tín hiệu âm thanh thì khơng thể lưu hết các tần số theo trục thời gian mà thay vào đó trong khoảng thời gian t người ta sẽ ghi lại tín hiệu âm thanh một lần. Kỹ
7
thuật đó gọi là lấy mẫu âm thanh - sampling of audio data và tần số thực hiện lấy mẫu gọi là sample rate [5].
Tuy nhiên việc biểu diễn âm thanh theo miền thời gian rất khó trích xuất các thơng tin đặc trưng cho âm thanh đó. Vậy nên cần biểu diễn theo miền tần số để biết trong khoảng thời gian có những tần số nào và giao động như thế nào. Và để làm được điều đó người ta sử dụng Fourier Transform (biến đổi Fourier). Để đẩy nhanh tốc độ tính tốn người ta cũng hay sử dụng FFT (Fast Fourier Transform) [6].
Kết quả ta thu được 1 phổ năng lượng âm thanh với trục y là tần số, dài màu là mức năng lượng cho tần số đó. Hay cịn gọi là spectrogram.
2.1.4. Ảnh phổ (Spectrogram)
Hình 2.1: Hình ảnh so sánh biểu đồ dao động và ảnh phổ (Nguồn: Phillip S. Lobel) [7]
Đây là một cách trực quan để biểu thị cường độ tín hiệu, hoặc độ lớn, của tín hiệu theo thời gian ở các tần số khác nhau hiện diện trong một dạng sóng cụ thể. Nói cách khác, đây là sự thể hiện của âm thanh dưới dạng biểu đồ 3D với thời gian (Ox), tần số (Oy), độ lớn (Oz).
8
Bất kỳ âm thanh nào cũng có thể chuyển thành một ảnh phổ cả. Đây là thứ mà một máy tính có thể chắc chắn hiểu được và có thể lưu trữ dưới dạng dữ liệu được. Nhưng có một lượng lớn dữ liệu bên trong một spectrogram như vậy và khi nhiều dữ liệu thì càng tốn thêm nhiều thời gian tính tốn để tìm ra kết quả phù hợp.
Vậy nên đầu tiên chúng ta phải làm sao giảm thời gian tính tốn đi, đồng nghĩa với việc giảm lượng data cần thiết.
2.1.5. Thuật toán Audio Fingerprinting
Vào năm 2003, Shazam - một ứng dụng miễn phí có thể giúp bạn nhận diện giai điệu của một bài hát bất kỳ - đã tiết lộ thuật toán nhận diện âm thanh của họ [8].
Vốn dĩ fingerprint - vân tay được sử dụng cho các công nghệ sinh trắc học nhận dạng vân tay. Bạn sẽ khơng khó để bắt gặp các thiết bị sử dụng công nghệ này như máy chấm cơng vân tay. Khóa cửa vân tay, khóa két vân tay, hệ thống kiểm soát ra vào bằng vân tay. Điện thoại di động thơng minh đơn giản bởi vì cơng nghệ này có rất nhiều ưu điểm so với các cơng nghệ nhận dạng khác.
Tính bảo mật cao là ưu điểm nổi trội của cơng nghệ nhận dạng vân tay. Nó được sử dụng rất nhiều trong các hệ thống đảm bảo an ninh. Mỗi dấu vân tay gần như là duy nhất (tỷ lệ trùng dấu vân tay là 1/64 tỷ dấu vân tay [9]). Và với đặc tính này nó cho thấy khả năng bảo mật bằng dấu vân tay của công nghệ này cao đến mức nào.
Quay lại với Audio fingerprinting, họ cũng tuân theo nguyên lý tương tự. Audio fingerprint chính là một bản tóm tắt cơ đọng dưới dạng âm thanh của âm thanh mà có thể xác định âm thanh tương tự trong cơ sở dữ liệu một cách nhanh chóng.
Đầu tiên, họ chuyển ảnh phổ trở thành một biểu đồ nhìn như một bản đồ “ngơi sao”. Mỗi một chấm (ngơi sao) chính là những tần số cao nhất tại một thời điểm nhất định. Bằng cách này, chúng ta không chỉ giảm từ đồ thị 3D xuống 2D mà ta còn giảm đáng kể những data points trên đồ thị. Đây là phần quan trọng đầu tiên trong công nghệ của Shazam. Mỗi một bài hát trong Shazam database được lưu trữ dưới dạng fingerprint như vầy.
9
Hình 2.2: Ảnh phổ trước và sau khi được chuyển đổi về không gian 2 chiều [10] Khi bạn mở điện thoại và nhấn nút Shazam, ứng dụng truy cập vào micro của bạn và Khi bạn mở điện thoại và nhấn nút Shazam, ứng dụng truy cập vào micro của bạn và bắt đầu tạo ra fingerprint của sóng âm nó nhận được. Phương pháp này giúp app Shazam có thể lọc ra tiếng ồn bởi vì nó chỉ tạo data points cho các tần số riêng biệt (stand-out frequencies). Sau khi app đã tạo ra fingerprint cho audio của bạn, nó sẽ gửi về server xử lý việc nhận diện.
Việc so sánh từng đoạn fingerprint nhận được với tất cả các fingerprint có trong database không hiệu quả, rất tốn thời gian và tài nguyên.
Nên Shazam đã nghĩ ra cách đó chính là khơng chỉ so sánh 1 note mà so sánh nhiều note trong một thời gian cụ thể (như cách não bộ chúng ta vậy).
Họ xây dựng danh mục fingerprint của họ dưới dạng bảng băm (hash table) trong đó khóa là tần số. Nhưng khóa đó khơng là một tần số mà là một hash của nhiều tần số. Việc này càng giúp giảm việc đụng độ (trùng khóa) và cải thiện đáng kể hiệu năng trong bảng băm.
10
2.1.6. Giới thiệu ACR Cloud
Hình 2.4: Quy trình xử lý việc nhận diện âm thanh của ACR Cloud (Nguồn: ACRCloud) ACRCloud)
ACRCloud là nhà cung cấp dịch vụ nhận diện nội dung tự động toàn diện từ Bắc Kinh, với hơn 53 triệu bản nhạc trong cơ sở dữ liệu nhận diện âm nhạc bằng vân tay, năm 2015 & 2016, xếp hạng 1 trong lĩnh vực công nghệ nhận diện âm nhạc bằng vân tay bởi Music Information Retrieval Evaluation eXchange (MIREX). ACRCloud hiện cung cấp dịch vụ cho các khách hàng như Alibaba, DTS, Baidu, Xiaomi và Deezer, v.v.. [11]
ACRCloud cho phép người dùng nhanh chóng nhận được thơng tin chi tiết về nội dung họ vừa trải nghiệm mà khơng cần tìm kiếm bằng văn bản nào.
ACRCloud giúp giám sát việc sử dụng bản quyền đối với một số hãng âm nhạc lớn nhất ở phương Tây. Các hãng thu âm áp dụng thuật toán nhận dạng nội dung tự động của cơng ty khởi nghiệp (do đó có tên là ACRCloud) để giám sát các tác phẩm xuất hiện trong các chương trình phát thanh và truyền hình, nội dung do người dùng tạo trên các nền tảng như YouTube và TikTok hoặc bất kỳ dịch vụ nào phải trả tiền cho chủ bản quyền.
ACRCloud cho phép người dùng tải lên nội dung của riêng họ để nhận dạng âm thanh và giám sát chương trình phát sóng. Ngồi ra, ACRCloud đã lập index hơn 72 triệu bài hát trong cơ sở dữ liệu music fingerprinting của mình. [12]
11
2.1.1. Cách sử dụng ACR Cloud trong NodeJS
Như đã đề cập ở trên, nhóm sử dụng nền tảng ACR Cloud, một cơ sở dữ liệu lưu trữ rất nhiều bản nhạc trên toàn thế giới. để nhận diện các đoạn video upload lên có bao gồm các đoạn nhạc đã có sẵn hay chưa.
Để tiến hành nhận diện đoạn âm thanh, ta sẽ tiến hành tạo project mới trên ACR Cloud, đồng thời sẽ chọn bucket để bucket source để nhận diện. Ở đây sẽ sử dụng ACR Cloud Bucket là bucket có sẵn của ACR Cloud.
Hình 2.5: Tạo project trong ACRCloud
Sau khi tạo project xong ta sẽ nhận được Host, Secret Key và Access Key, những thứ này sẽ được sử dụng khi config trong app như hình dưới đây.
const defaultOptions = {
host: ACRCLOUD_HOST, endpoint: '/v1/identify', signature_version: '1', data_type: 'audio',
12
secure: true,
access_key: ACRCLOUD_ACCESS_KEY, access_secret: ACRCLOUD_SECRET_KEY
};
Tiếp theo ta sẽ tiến hành tạo signature để có thể truy cập vào bucket
function buildStringToSign(method, uri, accessKey, dataType, signatureVersion, timestamp) {
return [method, uri, accessKey, dataType, signatureVersion, timestamp].join('\n');
}
function sign(signString, accessSecret) {
return crypto.createHmac('sha1', accessSecret) .update(Buffer.from(signString, 'utf-8')) .digest().toString('base64');
}
Như vậy là ta đã configure xong, để có thể nhận diện một đoạn nhạc ta sẽ sử dụng một API:
POST https://identify-eu-west-1.acrcloud.com/v1/identify
function identify(data, options, cb) {
const current_data = new Date();
const timestamp = current_data.getTime() / 1000;
const stringToSign = buildStringToSign('POST', options.endpoint,
13
options.data_type,
options.signature_version,
timestamp);
const signature = sign(stringToSign, options.access_secret);
const formData = { sample: data, access_key: options.access_key, data_type: options.data_type, signature_version: options.signature_version, sample_bytes: data.length, signature, timestamp, } request.post({
url: "http://" + options.host + options.endpoint, method: 'POST',
formData: formData
}, cb); }
Một số status code thường gặp: 0: Nhận diện thành cơng
1001: Khơng tìm thấy kết quả nhận diện 2005: Time out
3006: Tham số không hợp lệ …
14
Đối với status code 0, ACR Cloud đã nhận diện ra đoạn nhạc của chúng ta bị trùng lặp với một đoạn nhạc đã lưu trữ trong cơ sở dữ liệu, ta sẽ tiến hành lưu thông tin vi phạm. Sau khi thông báo người dùng, ta sẽ tiến hành tăng số strike hoặc block user (tùy số strike hiện có của người upload). Nếu status code là 1001, đoạn nhạc vừa upload khơng được tìm thấy có sự trùng lặp với trong cơ sở dữ liệu, hệ thống sẽ cho phép upload bình thường. Đối với các status code khác, hệ thống sẽ tiến hành báo lỗi cho người dùng.
2.2. Công nghệ thực tế ảo tăng cường
2.2.1. Giới thiệu thực tế ảo tăng cường (AR)
Công nghệ thực tế ảo tăng cường (AR) là một xu hướng công nghệ mới được phát triển trên nền tảng công nghệ thực tế ảo (VR). Hiện nay, công nghệ này đã trở nên cực kì phổ biến vì chúng có mặt trên tất cả các thiết bị điện tử đặc biệt là điện thoại thông minh. AR cho phép người dùng trải nghiệm những yếu tố ảo của cơng nghệ VR trong chính khơng gian thật. Điểm vượt trội trong công nghệ AR là mức độ chân thực của các hình ảnh, dữ liệu được xuất hiện ngay trong môi trường không gian thực của người dùng.
Hình 2.6: Số lượng người dùng của hoạt động thực tế tăng cường trên thiết bị di động (AR) trên toàn thế giới từ năm 2019 đến năm 2024 (Nguồn: Marvy Co) [13]
15
2.2.2. Cách thức hoạt động
Để thực hiện, công nghệ AR phải thơng qua một q trình phân tích:
Đầu tiên, AR sẽ tiến hành phân tách hình ảnh từ mơi trường thực thu được qua ống kính thiết bị. Trong đó bao gồm hai giai đoạn chính:
• Một là là xác định điểm dẫn (interest point), dấu chuẩn (fiducial marker) và luồng quang (optical flow).
• Hai là tái tạo lại hệ toạ độ khơng gian của mơi trường thực vừa phân tích, đặt các dữ liệu hình ảnh vào bên trong mơi trường đó.
2.2.3. Giới thiệu bộ lọc thực tế tăng cường (AR Filter)
Hình 2.7: Một số bộ lọc trên nền tảng Instagram (Nguồn Marvy Co.)
Nằm trong hệ sinh thái AR/VR, công nghệ AR Filter là những hiệu ứng và các đối tượng ảo được thiết kế đồ hoạ và thêm vào môi trường xung quanh mà chúng ta nhìn thấy khi sử dụng Facebook/ Instagram Camera.
Công nghệ AR Filter được biết đến phổ biến trên Instagram và Facebook. Công nghệ này cho phép những nhà sáng tạo nội dung thiết kế những hình ảnh 2D/3D, chèn âm thanh, hiệu ứng,.. theo nhu cầu của họ hoặc các thương hiệu.
Công nghệ AR Filter thường được biết đến với hai hình thức sử dụng phổ biến: • Mục đích chụp ảnh: Những bộ lọc thay đổi màu sắc không gian trong ảnh hay
16
Hình 2.8: Một số mini game trên các nền tảng xã hội hiện nay (Nguồn: Lenslist) [14] [14]
• Xuất hiện dưới hình thức mini game giải trí: Bằng cách sử dụng tính năng Face-tracking, hand-tracking trong AR, các nhà sáng tạo nội dung được phép tạo nên cách thức chơi game đơn giản nhưng thú vị cho mọi người.
2.2.4. DeepAR
17
Trên thị trường hiện nay có rất nhiều thư viện hỗ trợ AR Filter phổ biến như ARCore, Banuba, Mood-me, FaceUnity,.. trong đó có DeepAR.
DeepAR đã có một bước tiến lớn khi tích hợp thêm tính năng làm đẹp bao gồm cả trang điểm và thử màu tóc. Về phương diện bộ lọc cho các khn mặt, xóa nền cũng đã được tích hợp. DeepAR đã đột phá và tạo nhiều cơ hội cho các nhà phát triển dễ tiếp cận và sử dụng SDK trong các ứng dụng của mình. Tuy nhiên DeepAR cũng có một số nhược điểm đó chính là độ chính xác chưa q cao cũng như chất lượng hình ảnh.
18
2.3. Mơ hình MVC
2.3.1. Khái niệm
Mơ hình MVC (Model – View – Controller) là một trong những mơ hình kiến trúc ứng dụng phổ biến nhất. Ban đầu mơ hình này được áp dụng chủ yếu ở các ứng dụng desktop, nhưng sau này ý tưởng về mơ hình MVC được ứng dụng cho các nền tảng khác như Web.
Hình 2.10: Mơ hình MVC (Nguồn: Vietnix) [16]
2.3.2. Cấu trúc mơ hình MVC
2.3.2.1 Tầng xử lý – Controller
Xử lý logic của ứng dụng, là cầu nối giữa tầng View và Model. Hay nói một cách cụ thể, Controller sẽ nhận yêu cầu được gửi từ View và thực hiện xử lí yêu cầu, truy vấn hoặc thao tác dữ liệu lên tầng Model. Sau khi xử lý xong, kết quả sẽ được trả về lại cho tầng View.
19
2.3.2.2 Tầng logic dữ liệu – Model
Tầng Model là trung gian giữa ứng dụng và hệ quản trị cơ sở dữ liệu để cung cấp và quản lí mơ hình và các thao tác lên dữ liệu. Thơng thường, tầng Model sẽ kết nối với một hoặc nhiều cơ sở dữ liệu để thực hiện các thao tác lên dữ liệu.
2.3.2.3 Tầng giao diện – View
Thể hiện giao diện người dùng, là thành phần giao tiếp giữa người dùng (user) và ứng dụng (application).
2.3.3. Mơ hình MVC trong ứng dụng Web
Với sự phát triển của các công nghệ xây dựng web ở cả Frontend và Backend, các nhà phát triển có thể xây dựng và phát triển ứng dụng web một cách độc lập nhưng vẫn đảm bảo được tính kiến trúc của ứng dụng.
• Tầng giao diện người dùng (View) sẽ được phát triển độc lập ở phía client sử
dụng các cơng nghệ Frontend như VueJS, ReactJS, … Nói cách khác, client sẽ được chạy trên 1 server độc lập và có thể tương tác với phía server của backend. Hình Mơ hình MVC trong lập trình Web
20
• Tầng xử lí (Controller) và logic dữ liệu (Model) sẽ được phát triển độc lập ở
phía server sử dụng các công nghệ Backend như ExpressJS, DotNetCore, Flank, …
Sau khi hoàn thành việc phát triển, client sẽ cung cấp 1 bản build hồn chỉnh để thêm vào phía Server. Người dùng sẽ yêu cầu thành phần giao diện thông qua request gửi đến Server.
2.4. Nodejs
2.4.1. Giới thiệu
NodeJS là một môi trường thực thi mã nguồn mở của Javascript. Hiện nay - NodeJS rất phổ biến và được sử dụng trong rất nhiều project có quy mơ lớn và nhỏ khác nhau. Đặc trưng của NodeJS
Mỗi ứng dụng NodeJS chạy trên một process đơn và không tạo thêm luồng mới cho mỗi request. Đây cũng là điểm khác biệt của NodeJS so với các môi trường thực thi khác như DotNetCore, … . Thay vào đó, NodeJS sử dụng cơ chế bất đồng bộ I/O
(non-blocking I/O) để quản lý các request thay vì block chúng nhằm giảm thiểu việc
tốn tài nguyên xử lý. Nhờ vào cơ chế này, NodeJS có thể xử lý hàng ngàn kết nối đồng thời với 1 server duy nhất mà không cần nhà phát triển phải bỏ công sức và thời