Connect with us

AI

Using Artificial Intelligence to solve the 2048 Game (JAVA code)

By now most of you have heard/played the 2048 game by Gabriele Cirulli. It’s a simple but highly addictive board game which requires you to combine the numbers of the cells in order to reach the number 2048. As expected the difficulty of the game increases as more cells are filled with high values. Personally […]

Published

on

game-2048-javaBy now most of you have heard/played the 2048 game by Gabriele Cirulli. It’s a simple but highly addictive board game which requires you to combine the numbers of the cells in order to reach the number 2048. As expected the difficulty of the game increases as more cells are filled with high values. Personally even though I spent a fair amount of time playing the game, I was never able to reach 2048. So the natural thing to do is to try to develop an AI solver in JAVA to beat the 2048 game. 🙂

In this article I will briefly discuss my approach for building the Artificial Intelligence Solver of Game 2048, I will describe the heuristics that I used and I will provide the complete code which is written in JAVA. The code is open-sourced under GPL v3 license and you can download it from Github.

Developing the 2048 Game in JAVA

The original game is written in JavaScript, so I had to rewrite it in JAVA from scratch. The main idea of the game is that you have a 4×4 grid with Integer values, all of which are powers of 2. Zero valued cells are considered empty. At every point during the game you are able to move the values towards 4 directions Up, Down, Right or Left. When you perform a move all the values of the grid move towards that direction and they stop either when they reach the borders of the grid or when they reach another cell with non-zero value.  If that previous cell has the same value, the two cells are merged into one cell with double value. At the end of every move a random value is added in the board in one of the empty cells and its value is either 2 with 0.9 probability or 4 with 0.1 probability. The game ends when the player manages to create a cell with value 2048 (win) or when there are no other moves to make (lose).

In the original implementation of the game, the move-merge algorithm is a bit complicated because it takes into account all the directions. A nice simplification of the algorithm can be performed if we fix the direction towards which we can combine the pieces and rotate the board accordingly to perform the move. Maurits van der Schee has recently written an article about it which I believe is worth checking out.

All the classes are documented with Javadoc comments. Below we provide a high level description of the architecture of the implementation:

1. Board Class

The board class contains the main code of the game, which is responsible for moving the pieces, calculating the score, validating if the game is terminated etc.

2. ActionStatus and Direction Enum

The ActionStatus and the Direction are 2 essential enums which store the outcome of a move and its direction accordingly.

3. ConsoleGame Class

The ConsoleGame is the main class which allows us to play the game and test the accuracy of the AI Solver.

4. AIsolver Class

The AIsolver is the primary class of the Artificial Intelligence module which is responsible for evaluating the next best move given a particular Board.

Artificial Intelligence Techniques: Minimax vs Alpha-beta pruning

Several approaches have been published to solve automatically this game. The most notable is the one developed by Matt Overlan. To solve the problem I tried two different approaches, using Minimax algorithm and using Alpha-beta pruning.

Minimax Algorithm

Minimax
The Minimax is a recursive algorithm which can be used for solving two-player zero-sum games. In each state of the game we associate a value. The Minimax algorithm searches through the space of possible game states creating a tree which is expanded until it reaches a particular predefined depth. Once those leaf states are reached, their values are used to estimate the ones of the intermediate nodes.

The interesting idea of this algorithm is that each level represents the turn of one of the two players. In order to win each player must select the move that minimizes the opponent’s maximum payoff. Here is a nice video presentation of the minimax algorithm:

Below you can see pseudocode of the Minimax Algorithm:

function minimax(node, depth, maximizingPlayer)
    if depth = 0 or node is a terminal node
        return the heuristic value of node
    if maximizingPlayer
        bestValue := -∞
        for each child of node
            val := minimax(child, depth - 1, FALSE))
            bestValue := max(bestValue, val);
        return bestValue
    else
        bestValue := +∞
        for each child of node
            val := minimax(child, depth - 1, TRUE))
            bestValue := min(bestValue, val);
        return bestValue
(* Initial call for maximizing player *)
minimax(origin, depth, TRUE)

Alpha-beta pruning

Alpha-beta-pruning
The Alpha-beta pruning algorithm is an expansion of minimax, which heavily decreases (prunes) the number of nodes that we must evaluate/expand. To achieve this, the algorithm estimates two values the alpha and the beta. If in a given node the beta is less than alpha then the rest of the subtrees can be pruned. Here is a nice video presentation of the alphabeta algorithm:

Below you can see the pseudocode of the Alpha-beta pruning Algorithm:

function alphabeta(node, depth, α, β, maximizingPlayer)
    if depth = 0 or node is a terminal node
        return the heuristic value of node
    if maximizingPlayer
        for each child of node
            α := max(α, alphabeta(child, depth - 1, α, β, FALSE))
            if β ≤ α
                break (* β cut-off *)
        return α
    else
        for each child of node
            β := min(β, alphabeta(child, depth - 1, α, β, TRUE))
            if β ≤ α
                break (* α cut-off *)
        return β
(* Initial call *)
alphabeta(origin, depth, -∞, +∞, TRUE)

How AI is used to solve the Game 2048?

In order to use the above algorithms we must first identify the two players. The first player is the person who plays the game. The second player is the computer which randomly inserts values in the cells of the board. Obviously the first player tries to maximize his/her score and achieve the 2048 merge. On the other hand the computer in the original game is not specifically programmed to block the user by selecting the worst possible move for him but rather randomly inserts values on the empty cells.

So why we use AI techniques which solve zero-sum games and which specifically assume that both players select the best possible move for them? The answer is simple; despite the fact that it is only the first player who tries to maximize his/her score, the choices of the computer can block the progress and stop the user from completing the game. By modeling the behavior of the computer as an orthological non-random player we ensure that our choice will be a solid one independently from what the computer plays.

The second important part is to assign values to the states of the game. This problem is relatively simple because the game itself gives us a score. Unfortunately trying to maximize the score on its own is not a good approach. One reason for this is that the position of the values and the number of empty valued cells are very important to win the game. For example if we scatter the large values in remote cells, it would be really difficult for us to combine them. Additionally if we have no empty cells available, we risk losing the game at any minute.

For all the above reasons, several heuristics have been suggested such as the Monoticity, the smoothness and the Free Tiles of the board. The main idea is not to use the score alone to evaluate each game-state but instead construct a heuristic composite score that includes the aforementioned scores.

Finally we should note that even though I have developed an implementation of Minimax algorithm, the large number of possible states makes the algorithm very slow and thus pruning is necessary. As a result in the JAVA implementation I use the expansion of Alpha-beta pruning algorithm. Additionally unlike other implementations, I don’t prune aggressively the choices of the computer using arbitrary rules but instead I take all of them into account in order to find the best possible move of the player.

Developing a heuristic score function

In order to beat the game, I tried several different heuristic functions. The one that I found most useful is the following:

private static int heuristicScore(int actualScore, int numberOfEmptyCells, int clusteringScore) { int score = (int) (actualScore+Math.log(actualScore)*numberOfEmptyCells -clusteringScore); return Math.max(score, Math.min(actualScore, 1));
}

The above function combines the actual score of the board, the number of empty cells/tiles and a metric called clustering score which we will discuss later. Let’s see each component in more detail:

  1. Actual Score: For obvious reasons, when we calculate the value of a board we have to take into account its score. Boards with higher scores are generally preferred in comparison to boards with lower scores.
  2. Number of Empty Cells: As we mentioned earlier, keeping few empty cells is important to ensure that we will not lose the game in the next moves. Board states with more empty cells are generally preferred in comparison to others with fewer. A question rises concerning how would we value those empty cells? In my solution I weight them by the logarithm of the actual score. This has the following effect: The lower the score, the less important it is to have many empty cells (This is because at the beginning of the game combining the cells is fairly easy). The higher the score, the more important it is to ensure that we have empty cells in our game (This is because at the end of the game it is more probable to lose due to the lack of empty cells.
  3. Clustering Score: We use the clustering score which measures how scattered the values of our board are. When cells with similar values are close they are easier to combine meaning it is harder to lose the game. In this case the clustering score has a low value. If the values of the board are scattered, then this score gets a very large value. This score is subtracted from the previous two scores and acts like a penalty that ensures that clustered boards will be preferred.

In the last line of the function we ensure that the score is non-negative. The score should be strictly positive if the score of the board is positive and zero only when the board of the score is zero. The max and min functions are constructed so that we get this effect.

Finally we should note that when the player reaches a terminal game state and no more moves are allowed, we don’t use the above score to estimate the value of the state. If the game is won we assign the highest possible integer value, while if the game is lost we assign the lowest non negative value (0 or 1 with similar logic as in the previous paragraph).

More about the Clustering Score

As we said earlier the clustering score measures how much scattered are the values of the board and acts like a penalty. I constructed this score in such a way so that it incorporates tips/rules from users who “mastered” the game. The first suggested rule is that you try to keep the cells with similar values close in order to combine them easier. The second rule is that high valued cells should be close to each other and not appear in the middle of the board but rather on the sides or corners.

Let’s see how the clustering score is estimated. For every cell of the board we estimate the sum of absolute differences from its neighbors (excluding the empty cells) and we take the average difference. The reason why we take the averages is to avoid counting more than once the effect of two neighbor cells. The total clustering score is the sum of all those averages.

The Clustering Score has the following attributes:

  1. It gets high value when the values of the board are scattered and low value when cells with similar values are close to each other.
  2. It does not overweigh the effect of two neighbor cells.
  3. Cells in the margins or corners have fewer neighbors and thus lower scores. As a result when the high values are placed near the margins or corners they have smaller scores and thus the penalty is smaller.

The accuracy of the algorithm

As expected the accuracy (aka the percentage of games that are won) of the algorithm heavily depends on the search depth that we use. The higher the depth of the search, the higher the accuracy and the more time it requires to run. In my tests, a search with depth 3 lasts less than 0.05 seconds but gives 20% chance of winning, a depth of 5 lasts about a 1 second but gives 40% chance of winning and finally a depth of 7 lasts 27-28 seconds and gives about 70-80% chance of winning.

Future expansions

For those of you who are interested in improving the code here are few things that you can look into:

  1. Improve the Speed: Improving the speed of the algorithm will allow you to use larger depth and thus get better accuracy.
  2. Create Graphics: There is a good reason why Gabriele Cirulli’s implementation became so famous. It is nice looking! I did not bother developing a GUI but I rather print the results on console which makes the game harder to follow and to play. Creating a nice GUI is a must.
  3. Tune Heuristics: As I mentioned earlier, several users have suggested different heuristics. One can experiment with the way that the scores are calculated, the weights and the board characteristics that are taken into account. My approach of measuring the cluster score is supposed to combine other suggestions such as Monotonicity and Smoothness, but there is still room for improvement.
  4. Tuning the Depth: One can also try to tune/adjust the depth of the search depending on the game state. Also you can use the Iterative deepening depth-first search algorithm which is known to improve the alpha-beta pruning algorithm.

Don’t forget to download the JAVA code from Github and experiment. I hope you enjoyed this post! If you did please take a moment to share the article on Facebook and Twitter. 🙂

About Vasilis Vryniotis

My name is Vasilis Vryniotis. I’m a Data Scientist, a Software Engineer, author of Datumbox Machine Learning Framework and a proud geek. Learn more

Source: http://blog.datumbox.com/using-artificial-intelligence-to-solve-the-2048-game-java-code/

AI

A Quick Guide to Conversational AI And It’s Working Process

Customer support is an integral part of every business; without offering support services, it is difficult to achieve maximum customer satisfaction. To ensure the same, […]

The post A Quick Guide to Conversational AI And It’s Working Process appeared first on Quytech Blog.

Published

on

Customer support is an integral part of every business; without offering support services, it is difficult to achieve maximum customer satisfaction. To ensure the same, businesses hire professionals who work round the clock to deliver support services. No matter how efficiently a business handles this segment, they might have to face problems such as “delay in responding customers’ queries” or “making a customer wait to connect with the support professionals”, and more.

A Conversational AI is a perfect solution to this most common challenge that manufacturing, FMCG, retail, e-commerce, and other industries are facing. Never heard of this term?

Well, this is the latest trend in almost all the industries that are already using artificial intelligence technology or wanting to adopt the same in their business operations. Let’s read about the same in detail.

What is Conversational AI?

Conversational AI is a specific kind of artificial intelligence that makes software interact and converse with users in a highly intuitive way. It uses natural language processing (NLP) to understand and interact in human language.

The conversational AI, when integrated into chatbots, messengers, and voice assistants, enables businesses to deliver personalized customer experience and achieve 100% customer satisfaction. Google Home and Amazon Echo are the two popular examples of it.

Applications of Conversational AI

Conversational AI a new and automated way of offering customer support services. Healthcare, Adtech, logistics, insurance, travel, hospitality, finances, and other industries are using technology in the following:

Messaging applications

Conversational AI can be used in a messaging application to offer personalized support services through chat. Your customers can choose the “chat support” option and talk to the chatbot to get the support.

Speech-based virtual assistants

A conversational AI can use speech recognition technology so that you can offer a speech-based virtual assistant for your customers. These are the type of chatbots where users can get any information through voice commands.

Virtual customer assistants

This type of conversational AI helps in offering online support to customers; you can develop the same to offer support through Web, SMS, messaging applications, and more.

Virtual personal assistants

A virtual personal assistant, powered by conversational AI, minimizes the need of hiring a huge team to offer dedicated support services to each of your customers.

Virtual employee assistants

Employees working in big organizations might need various types of assistants. A conversational AI used to build a virtual employee assistant can be the point of contact for all such employees. They can find the required information just by interacting with that assistant.

Robotic process automation

Robotic process automation using the potential of conversational AI helps a machine to understand human conversations and their intent to perform automated tasks.

Working of conversational AI

Machine learning, deep learning, and natural language processing are the three main technologies behind conversational AI. Here is how it works:

  1. Collection of unstructured data from various sources
  2. Data preprocessing and feature engineering
  3. Creating an AI model
  4. Training the model to automatically improve from experiences
  5. Testing the model
  6. Detecting patterns and making decisions
  7. AI deployment

What benefits businesses can get by using conversational AI?

Apart from helping businesses to deliver an unmatched customer experience, conversational AI can offer a plethora of other benefits that include:

Saves Time

Having an automated chatbot would help you save a considerable amount of time. The saved time can be used to perform other tasks or focus on your business’ marketing and promotion.

Helps in providing Real-Time Support Services

A conversational AI can handle multiple queries at one time, without even letting other customers wait. In short, every customer will feel like they are getting dedicated support services in real-time.

Improves business efficiency

With a conversational AI, you can have the assurance that your customers are being taken care of properly. In short, their queries are being handled and resolved immediately. You can focus on other segments of your business and improve efficiency.

Helps in lowering down Customers’ Complaints

Since a conversational AI can immediately respond to queries of the customers, it can help to reduce the number of complaints. Resolving customers’ complaints without making them call a support professional would increase customer loyalty and increase your brand reputation.

Increases chances of sales

By providing a persistent communication channel that precedes the context further, you can make your customers explore more and shop more. Moreover, a conversational AI can also help in reducing the cart abandonment rate as it can provide immediate assistance regarding the issues a user is facing while making the payment, applying a discount code, or at any other time.

The user would not even have to contact the support center. To understand this better, let’s take an example- a user has added one or more products to the cart, but he/she is unable to find his/her preferred mode of payment. After a few minutes, what would the customer do, either visit the contact us section to get the customer support number and connect to a professional (which is a time taking process) or simply get the support through a conversational AI. The latter would automatically send a message to the customer to ask the query and provide a resolution.

Now when you know everything about conversational AI and want to build one for you, then contact Quytech, a trusted AI app development company. Quytech has more than a decade of experience in working on artificial intelligence, machine learning, and other latest technologies.

Final Words

Are you curious to know about conversational artificial intelligence? Give this article a read to know the definition and working of conversational AI in detail. We have also mentioned the reasons why this technology is becoming the talk of the town among businesses of all sizes and types. After reading the article, if you want to develop a tailor-made conversational AI for your business, then reach out to a reliable and experienced AI development company or hire AI developers with considerable experience.

Source: https://www.quytech.com/blog/what-is-conversational-ai-and-how-does-it-work/

Continue Reading

AI

Are Legal chatbots worth the time and effort?

Published

on

KLoBot — the Best AI-Chatbot builder platform

The legal industry is always known for its resistance to change, but technology in the legal landscape has seen rapid growth from the past few years. The global Coronavirus pandemic has also accelerated the pace of investments in legal technology, which is likely to transform the legal marketplace.

Several law firms are majorly focusing on the adoption of innovative technology, which has the capability to modernize the practice of law. Innovative technologies, including Artificial Intelligence, Analytics, and Blockchain, among others, prioritizes the speed and efficiency of legal services.

Technology in the legal sector is an enabler that empowers attorneys and paralegals to perform their jobs better.

The use of AI and its applications in the legal industry is moving higher and is becoming the next big thing for legal firms. By 2024 the legal AI software market is expected to reach $1,236 million and is forecasted to grow at a CAGR of 31.3% during 2019–2024. (2)

Incorporating AI into legal practice can augment the workflows and streamline the work processes. AI-powered chatbots are disrupting the legal industry and are poised to become a preferred mode of communication for internal as well as external users. Leveraging NLP and NLU algorithm power, which are one of the prominent fields in AI, chatbots can understand intents, contexts, and further handle end to end human-machine interactions.

Law firms, as well as corporate legal departments, continue to look for new ways to enhance efficiency and drive productivity. AI-enabled chatbots are one such way that has the potential to revolutionize the law firm operations. These chatbots are a new approach for law firms to imitate human conversations and automatically respond to clients as well as attorneys’ queries.

Legal chatbots have the capabilities to make better and quicker decisions when compared to human agents. It reduces the burden on attorneys and paralegals to repetitively answer the same queries, which further brings consistency to users’ responses.

1. 8 Proven Ways to Use Chatbots for Marketing (with Real Examples)

2. How to Use Texthero to Prepare a Text-based Dataset for Your NLP Project

3. 5 Top Tips For Human-Centred Chatbot Design

4. Chatbot Conference Online

Internal Chatbots

Internal chatbots are nothing but the chatbots for internal operations and communications, helping law firms manage enterprise collaboration. Internal legal chatbots help law firms automate the contract review process, which is one of the most tedious tasks for attorneys and in-house counsel.

Legal chatbots for attorneys come with a predefined set of policies to review & analyze documents, perform due diligence, and automate other monotonous tasks that attorneys perform. Other basic tasks comprising scheduling meetings, setting up reminders, and searching relevant matter information can also be performed by legal chatbots. Internal legal chatbots empower attorneys to reduce the risk of human errors by automating the monotonous administrative chores and allow them to focus more on higher value and complicated tasks that need attorney’s intervention.

External Chatbots

External chatbots, on the other side, are the client-facing legal chatbots. These chatbots can draft the legal documents, including UCC filings, divorce forms, and other non-disclosure agreements based on the client inputs.

External legal chatbots empower law firms to handle the client intake process efficiently and generate leads, which further reduces an attorney’s time spent on these activities.

In the current scenario of receiving information instantly at a fingertip, legal chatbots serve as the best solution to handle client queries and provide legal advice.

External, as well as internal legal chatbots with their 24/7 supporting abilities, facilitate law firms to manage operational costs and meet the evolving client expectations.

Although chatbots are taking time to augment legal services but are worth the effort.

KLoBot is an incredibly intelligent AI chatbot builder platform that allows legal firms to create text and voice-based chatbots within minutes. KLoBot’s easy drag and drop skill interface helps law firms to design no-code chatbots that can be deployed across an organization’s favorite channels. The chatbots built on the KLoBot platform help law firms perform simple and complex routine tasks, including QnA and knowledge repository search. Few other jobs, including scheduling meetings, setting up reminders, completing actions on behalf of attorneys, finding colleagues, assisting attorneys, and much more, are also being performed by KLoBot enabled chatbots.

KLoBot enabled chatbots to act as a personal assistant and enhance attorneys as well as client experiences. These chatbots empower law firms to simplify internal as well as external communications and streamline business processes.

KLoBot AI chatbots with its feature-rich admin console, provide law firms robust security controls. To know more about KLoBot click here.

References

[1] The Law Society Capturing Technological Innovation in Legal Services Report

[2] https://www.marketsandmarkets.com/

Source: https://chatbotslife.com/are-legal-chatbots-worth-the-time-and-effort-5f44936f7e89?source=rss—-a49517e4c30b—4

Continue Reading

AI

Things to Know about Free Form Templates

A single file that includes numerous supporting files is commonly known as a form template. Some files will define or show the controls to appear on the free form templates or design. The collections of these supporting files or templates are also called form files. While designing free form templates, users should be able to […]

The post Things to Know about Free Form Templates appeared first on 1redDrop.

Published

on

A single file that includes numerous supporting files is commonly known as a form template. Some files will define or show the controls to appear on the free form templates or design. The collections of these supporting files or templates are also called form files. While designing free form templates, users should be able to view and also work with the form files. 

It will create a new free form template by copying and storing those files within a folder. A form template (.XSN) file designing or creation of a single file will include various supporting files. Users may fill out the online form by accessing the .XML form file, which is a form template.

Designing Free Form Templates

There are numerous processes that define free form template design, and are as follows:

  • Designing the form’s appearance – the instructional text, labels, and controls
  • Controls will assist with user interaction behavior on the form template. You can design a specific section to appear or disappear when the user chooses a particular option
  • Whether the form template may include some additional views. For a permit application form design, for example, you have to provide different views for each person. One view especially for the electrical contractor, next for the receiving agent, and finally, the investigator. He or she will deny or approve the permit application
  • Next, you need to know how & where to store the form data. Designing free from templates will allow users to submit their data within the database either online or direct access. If not, they can also store the same in any specific shared folder
  • It is essential to design the other elements, colors, and fonts within the form template
  • Users must be able to personalize the form. Allowing users to include various rows within the optional section, repeating section, or a repeating table
  • Users should receive a notification when they forget to input a mandatory field or make mistakes within the form
  • After completing the free form templates design, you can publish the same online using a .XSN file format

Club Signup Form

A simple registration form can help your Club Signup Form creation process go smoother. This signup form could be an ideal solution for a new club membership registration for any organization or club.

Application Form

Application form templates are much easier to use & set-up to streamline your application process. You can customize this online form and utilize the same for numerous applications. Make use of this application form as a job application form, volunteer applications, contest entries, or high school scholarship applications. It is an ideal solution for scholarship programs, nonprofit organizations, business owners, and many such users and use cases.

Scheduling Form

Scheduling form templates are handy and can be used for numerous appointment booking requirements. A scheduling form is also utilized for various appointment scheduling or online reservations and booking purposes. Regardless of your business requirement, it is easy to customize the form template.

Concept Testing Survey

While testing a new design or concept, it is essential to gather the responses quickly. Freeform templates for a concept testing survey make it much easier to gather product feedback and reach the target audience. It is essential to conduct market research while planning to release a new product. A mobile-friendly form will allow you to utilize the survey questions for collecting the product’s consumer input quickly.

Credit Card Order Form

It is not always a complex process to provide an online credit card payment form for the customers. This form template will allow you to access numerous services or products for collecting card payment information. You can utilize this yet-another endless and simple payment form.

Employment Application Form

The employment application form for recruitment will assist the HR team to gather the required information from candidates. During the interview or application process, you can easily remove any expensive follow-ups. Some of the fields are contact information, employment history, useful information, etc. as well as an outline of the job description, consent for background checks, military service record, anticipated start date, any special skills, and many more. It is optional to enable notifications for the form owners to receive an alert or email when a new employment application is submitted.

Source: https://1reddrop.com/2020/10/24/things-to-know-about-free-form-templates/?utm_source=rss&utm_medium=rss&utm_campaign=things-to-know-about-free-form-templates

Continue Reading
AI31 mins ago

A Quick Guide to Conversational AI And It’s Working Process

AI2 hours ago

Are Legal chatbots worth the time and effort?

AI2 days ago

Things to Know about Free Form Templates

AI2 days ago

Are Chatbots Vulnerable? Best Practices to Ensure Chatbots Security

AI2 days ago

Best Technology Stacks For Mobile App Development

AI3 days ago

Arcanum makes Hungarian heritage accessible with Amazon Rekognition

AI3 days ago

Arcanum makes Hungarian heritage accessible with Amazon Rekognition

AI3 days ago

Arcanum makes Hungarian heritage accessible with Amazon Rekognition

AI3 days ago

Arcanum makes Hungarian heritage accessible with Amazon Rekognition

AI3 days ago

Arcanum makes Hungarian heritage accessible with Amazon Rekognition

AI3 days ago

Arcanum makes Hungarian heritage accessible with Amazon Rekognition

AI3 days ago

Arcanum makes Hungarian heritage accessible with Amazon Rekognition

AI3 days ago

Arcanum makes Hungarian heritage accessible with Amazon Rekognition

AI3 days ago

Arcanum makes Hungarian heritage accessible with Amazon Rekognition

AI3 days ago

Arcanum makes Hungarian heritage accessible with Amazon Rekognition

AI3 days ago

Arcanum makes Hungarian heritage accessible with Amazon Rekognition

AI3 days ago

Arcanum makes Hungarian heritage accessible with Amazon Rekognition

AI3 days ago

Arcanum makes Hungarian heritage accessible with Amazon Rekognition

AI3 days ago

Arcanum makes Hungarian heritage accessible with Amazon Rekognition

AI3 days ago

Arcanum makes Hungarian heritage accessible with Amazon Rekognition

Trending