Đây là một bài toán hỗ trợ cho việc tùy chỉnh ảnh chụp theo các phong cách tranh vẽ của 4 họa sĩ nổi tiếng bao gồm: Monet, Cezanne, Van Gogh, Ukiyo E, nhằm phục vụ cho các mục đích sáng
PHƯƠNG PHÁP
Mạng đối nghịch tạo sinh
Hình 2-1 Kiến trúc GANs – Mạng đối nghịch tạo sinh
Hình 2.1 mô tả tổng quan phương pháp 1 về Mạng đối nghịch tạo sinh có tên tiếng Anh là Generative Adversarial Networks được giới thiệu vào năm 2014 bởi Ian Goodfellow GANs có khá nhiều phiên bản và trong đồ án này, chúng tôi sử dụng CycleGAN
Mạng đối nghịch tạo sinh(hay còn gọi là mạng đối nghịch phát sinh, tiếng Anh: generative adversarial network hay viết tắt GAN) là một lớp của khung (framework) học máy do Ian Goodfellow và cộng sự thiết kế vào năm 2014 GAN chứa hai mạng thần kinh (mạng phân biệt và mạng tạo sinh) cạnh tranh lẫn nhau trong một trò chơi (ở dạng một trò chơi có tổng bằng không, trong đó bên thắng sẽ chiếm phần của bên thua, hay nói cách khác là bên thua sẽ bị mất phần cho bên thắng)
Cho một tập huấn luyện, kỹ thuật này học cách tạo ra dữ liệu mới với cùng chỉ số thống kê như tập huấn luyện Ví dụ, một mạng đối nghịch tạo sinh (GAN) huấn luyện các bức ảnh để có thể tạo ra các ảnh mới mà ít nhất nhìn từ bề ngoài là chân thực đối
10 với những người quan sát, chứa nhiều đặc tính thực tế Mặc dù ban đầu được đề xuất dưới dạng một hình thức mô hình tạo sinh (mô hình phát sinh) cho phương pháp học không có giám sát, GAN cũng được chứng minh là hữu ích cho học nửa giám sát, học có giám sát đầy đủ,và học tăng cường Ý tưởng cơ bản của GAN dựa trên sự huấn luyện "gián tiếp" thông qua bộ phân biệt (discriminator), mà bản thân nó cũng đang được cập nhật động.Về cơ bản, điều này có nghĩa là bộ tạo sinh (generator) không được đào tạo để giảm thiểu khoảng cách đến một hình ảnh cụ thể, hơn là để đánh lừa bộ phân biệt Do đó, điều này cho phép mô hình học theo cách không bị giám sát
Các mạng GAN tương tự bắt chước trong sinh học tiến hóa, với một sự chạy đua tiến hóa ở cả hai bộ, bộ phân biệt và bộ tạo sinh
Hình 2-2 Đơn giản hóa kiến trúc GANs – Mạng đối nghịch tạo sinh
CycleGANs
CycleGAN được giới thiệu bởi Zhu et al vào năm 2017, cho phép chuyển đổi hình ảnh giữa hai miền không giống nhau mà không cần cặp dữ liệu huấn luyện tương ứng Thay vì cần cặp dữ liệu tương ứng giữa hai miền, CycleGAN tập trung vào việc xây dựng một mô hình có khả năng ánh xạ từ miền A sang miền B và ngược lại thông qua hai mạng tạo sinh và hai mạng phân biệt
CycleGAN được tạo ra với mục đích sử dụng sự tương quan giữa hai chuỗi ánh xạ ngược lại (A->B->A và B->A->B) để đảm bảo tính nhất quán giữa hai miền dữ liệu
Có nghĩa là mô hình sẽ học cách tạo ra một biểu diễn tương tự cho cùng một đối tượng trong hai miền dữ liệu khác nhau
CycleGAN được thiết kế dựa trên Generative Adversarial Network (GAN) Kiến trúc GAN là một cách tiếp cận để huấn luyện một mô hình sinh ảnh bao gồm hai mạng neural: một mạng generator và một mạng discriminator Generator sử dụng một vector ngẫu nhiên lấy từ latent space làm đầu vào và tạo ra hình ảnh mới và Discriminator lấy một bức ảnh làm đầu vào và dự đoán xem nó là thật (lấy từ dataset) hay giả (được tạo ra bởi generator) Cả hai mô hình sẽ thi đấu với nhau, Generator sẽ được huấn luyện để sinh ảnh có thể đánh lừa Discriminator và Discriminator sẽ được huấn luyện để phân biệt tốt hơn hình ảnh được tạo
Generator đầu tiên gọi là G, nhận đầu vào là ảnh từ domain X (ngựa vằn) và convert nó sang domain Y (ngựa thường) Generator còn lại gọi là Y, có nhiệm vụ convert ảnh từ domain Y sang X Mỗi mạng Generator có 1 Discriminator tương ứng với nó
Hình 2-3 Kết quả hình ảnh trực quan hóa
TRIỂN KHAI ỨNG DỤNG
Thiết kế
Việc tập trung vào khả năng tương thích với thiết bị di động hoàn toàn phù hợp với việc sử dụng điện thoại thông minh phổ biến trong bối cảnh kỹ thuật số ngày nay Quyết định này nhấn mạnh sự hiểu biết về sở thích và hành vi của người dùng, thừa nhận sự phụ thuộc rộng rãi vào thiết bị di động cho nhiều tác vụ khác nhau, bao gồm chỉnh sửa ảnh và sử dụng ứng dụng
Khả năng tương thích với thiết bị di động đảm bảo rằng ứng dụng của bạn có thể tích hợp liền mạch vào cuộc sống hàng ngày của người dùng, tận dụng sự quen thuộc và tiện lợi của điện thoại thông minh Cách tiếp cận này phục vụ cho tính chất thường xuyên di chuyển của người dùng, cho phép họ tương tác với các tính năng chuyển đổi từ ảnh sang tranh vẽ một cách thuận tiện từ thiết bị cầm tay của họ
Hơn nữa, việc phù hợp với sự phổ biến của công nghệ di động sẽ khuếch đại khả năng truy cập ứng dụng của bạn Nó cho phép phạm vi tiếp cận rộng hơn, khai thác cơ sở người dùng lớn hơn, chủ yếu tương tác với các dịch vụ kỹ thuật số thông qua điện thoại thông minh của họ
Cuối cùng, việc ưu tiên khả năng tương thích với thiết bị di động phản ánh nhận thức sâu sắc về sở thích và hành vi của người dùng, nâng cao khả năng truy cập và sự tiện lợi, đồng thời định vị ứng dụng của bạn để phục vụ hiệu quả cho nhiều đối tượng người dùng trong thế giới tập trung vào thiết bị di động ngày nay
- Front-end: React Native (Ngôn ngữ lập trình JavaScript) o React Native là một framework mã nguồn mở được sử dụng để phát triển ứng dụng di động đa nền tảng Nó sử dụng ngôn ngữ lập trình JavaScript để tạo ra các ứng dụng di động trên các hệ điều hành iOS và Android với một cơ sở mã duy nhất
14 o React Native sử dụng thư viện React JavaScript để xây dựng các giao diện ứng dụng cực nhanh và đáp ứng nhiều nhu cầu Ngoài ra, framework này có khả năng kết xuất tuyệt vời và sử dụng cách tiếp cận dựa trên thành phần giúp dễ dàng tạo ra các ứng dụng với giao diện người dùng đơn giản, hoặc phức tạp o Một số tính năng nổi bật của React Native bao gồm:
▪ Tái sử dụng mã: React Native cho phép bạn tái sử dụng tới 80- 90% mã nguồn giữa các ứng dụng iOS và Android, giúp tiết kiệm thời gian và chi phí phát triển
▪ Tính năng đáp ứng: React Native sử dụng các thành phần dựa trên Flexbox, giúp các ứng dụng của bạn có thể thích ứng với các kích thước màn hình khác nhau
▪ Khả năng kết nối với API gốc: React Native cho phép bạn kết nối các ứng dụng của mình với các API gốc của hệ điều hành, giúp bạn truy cập các tính năng và dữ liệu hệ thống o React Native là một lựa chọn phổ biến cho các nhà phát triển ứng dụng di động Nó là một framework mạnh mẽ và linh hoạt, có thể được sử dụng để tạo ra các ứng dụng chất lượng cao cho cả iOS và Android o Một số ứng dụng nổi tiếng được xây dựng bằng React Native bao gồm:
▪ Walmart o Nếu bạn đang tìm kiếm một framework để phát triển ứng dụng di động đa nền tảng, React Native là một lựa chọn tuyệt vời o JavaScript là một ngôn ngữ lập trình phổ biến được sử dụng chủ yếu để làm việc trên trình duyệt web Nó được sử dụng để thêm các tính năng tương tác động đến trang web, làm cho trải nghiệm người dùng trở nên
15 linh hoạt và phong phú hơn JavaScript không chỉ giúp tạo ra các hiệu ứng động, thay đổi nội dung của trang web mà còn cho phép tương tác với người dùng, kiểm tra dữ liệu, và thậm chí là tạo ra ứng dụng web hoàn chỉnh o Ban đầu, JavaScript được phát triển để thực hiện các chức năng như kiểm tra hợp lệ của dữ liệu nhập vào trên trình duyệt, thay đổi nội dung của trang web, hoặc xử lý sự kiện như click chuột hay hover Tuy nhiên, với sự phát triển của nền tảng và các thư viện JavaScript, ngôn ngữ này đã trở thành một trong những công cụ quan trọng nhất trong việc phát triển các ứng dụng web và di động hiện đại o JavaScript hiện đại đã phát triển rất nhiều, với nhiều framework và thư viện mạnh mẽ như React, Angular, hoặc Vue.js Nhờ vào sức mạnh của JavaScript, người phát triển có thể tạo ra các ứng dụng web động, linh hoạt và tương tác cao, từ các trang web đơn giản cho đến các ứng dụng web phức tạp và quy mô lớn
- Back-end: Flask (Ngôn ngữ lập trình Python): o Flask là một framework (khung sườn) web Python nhẹ và linh hoạt được sử dụng để xây dựng các ứng dụng web Nó được tạo ra để đơn giản hóa việc phát triển các ứng dụng web bằng Python bằng cách cung cấp một cách tiếp cận đơn giản, nhẹ nhàng nhưng vẫn mạnh mẽ và linh hoạt o Flask không yêu cầu nhiều cấu hình phức tạp, điều này giúp người phát triển tập trung vào việc xây dựng ứng dụng thay vì phải lo lắng về việc cấu hình cụ thể Nó có cấu trúc linh hoạt, cho phép bạn chọn lựa các thành phần và thư viện cần thiết để phát triển ứng dụng theo cách tốt nhất cho dự án của mình o Flask cung cấp các công cụ cơ bản như routing (định tuyến), request/response handling (xử lý yêu cầu/phản hồi), và hỗ trợ mô hình
MVC (Model-View-Controller) nhưng không ép buộc một cấu trúc cụ thể nào, giúp người dùng linh hoạt trong việc tổ chức mã nguồn của họ o Với cộng đồng lớn và nhiều tài liệu hỗ trợ, Flask là một lựa chọn phổ biến cho việc phát triển các ứng dụng web Python, đặc biệt là đối với các dự án nhỏ đến trung bình hoặc khi cần một cách tiếp cận linh hoạt và nhanh chóng
- Thiết kế giao diện: Figma o Figma là một công cụ thiết kế đồ họa vector và giao diện người dùng trực tuyến Nó được sử dụng để tạo ra các bản thiết kế UI/UX cho ứng dụng web và di động, cũng như các sản phẩm kỹ thuật số khác Figma hoạt động dựa trên mô hình đám mây, cho phép người dùng truy cập và làm việc trên các tài liệu của mình từ bất kỳ đâu và trên bất kỳ thiết bị nào o Figma cung cấp một loạt các tính năng và công cụ mạnh mẽ cho phép người dùng tạo ra các bản thiết kế chất lượng cao Một số tính năng nổi bật của Figma bao gồm: o Mô hình vector: Figma sử dụng mô hình vector, giúp cho các bản thiết kế của bạn có thể được thu phóng và thay đổi kích thước mà không làm giảm chất lượng o Cộng tác: Figma cho phép người dùng cộng tác trên cùng một tài liệu cùng một lúc, giúp quá trình thiết kế trở nên hiệu quả hơn o Thử nghiệm: Figma cung cấp các công cụ thử nghiệm để giúp bạn kiểm tra các bản thiết kế của mình trước khi phát hành o Figma là một công cụ thiết kế phổ biến cho các nhà thiết kế, nhà phát triển và doanh nghiệp Nó là một lựa chọn tuyệt vời cho bất kỳ ai cần tạo ra các bản thiết kế UI/UX chất lượng cao o Đặc điểm thiết kế của ứng dụng xoay quanh việc bồi dưỡng một trải nghiệm thân thiện với người dùng và có thể truy cập toàn cầu, đảm bảo
17 khả năng sử dụng liền mạch cho các cá nhân ở mọi lứa tuổi và trình độ kỹ thuật Khi ra mắt lần đầu tiên của ứng dụng, người dùng được chào đón với một bộ toàn diện hướng dẫn giới thiệu, làm rõ ứng dụng mục đích đồng thời cung cấp các ví dụ minh họa thông qua hình ảnh mẫu o Mọi khía cạnh của giao diện đều được chế tạo tỉ mỉ để không chỉ mang lại sự rõ ràng mà còn cả sự đơn giản Mỗi nút không chỉ được dán nhãn rõ ràng mà còn mang tính chiến lược có tổ chức, phục vụ một chức năng duy nhất để tránh bất kỳ sự nhầm lẫn tiềm ẩn của người dùng Việc tích hợp các biểu tượng phục vụ để tăng cường sự hấp dẫn trực quan đồng thời củng cố ý kiến của người dùng o hiểu và ghi nhớ thông tin Những cái này các biểu tượng được thiết kế chu đáo, ưu tiên sự đơn giản o và mức độ phù hợp với từng chức năng, từ đó nâng cao khả năng sử dụng của người dùng sự hiểu biết o Hơn nữa, ngôn ngữ và hình ảnh của ứng dụng phục vụ cho nhiều đối tượng, sử dụng đơn giản giải thích và hình ảnh có thể liên hệ được trên toàn cầu để đảm bảo khả năng tiếp cận người dùng trên nhiều nền tảng khác nhau Các thuật ngữ kỹ thuật phức tạp được làm sáng tỏ thông qua rõ ràng và o giải thích ngắn gọn, cho phép người dùng nắm bắt ngay cả những những khái niệm phức tạp nhất một cách dễ dàng o Sự sắp xếp có chủ ý của các thành phần giao diện tuân theo một cấu trúc hợp lý và trực quan, tạo điều kiện dễ dàng điều hướng và truy xuất thông tin cho người dùng Chức năng các nút được đặt ở vị trí chiến lược trong giao diện, đảm bảo khả năng hiển thị và khả năng hoạt động tối ưu, do đó giảm thiểu bắt chước bất kỳ rào cản tiềm ẩn nào trong tương tác của người dùng o Nhìn chung, triết lý thiết kế của ứng dụng được giữ vững theo nguyên tắc lấy người dùng làm trung tâm, sử dụng sự kết hợp hài hòa ngôn ngữ
Hướng dẫn cài đặt (Google Play với tên Artistic Lens)
Bước 1: Clone source code từ GitHub
Chạy lệnh: git clone https://github.com/PhuocTri0106and1608/FilterPictureFE.git Bước 2: Cài đặt các package
Chạy lệnh: npm install hoặc: npm install yarn
Hướng dẫn run code
Khởi động dự án bằng cách khởi động ứng dụng trên Android Emulator hoặc điện thoại Android:
Chạy lệnh yarn run android