Gesture recognition is becoming a growing field of study with too many applications such as automated sign language recognition, human-machine interaction and medical application. In this research, we focus only on hand gesture recognition. We study and analyze the different technical approaches and algorithms used to detect and recognize the hand gesture; we compare some machine learning and deep learning algorithms on different datasets and discuss their results, benefits and limitations, and explain why some of these approaches fail to give efficient results. Moreover, we review the different hand gestures recognition stages such as the detection, tracking, as well as numerous related techniques and approaches. In addition, we present the different factors that may affect the result and must be taken care of when dealing with video-based machine learning algorithms, such as data preparation and image preprocessing. Through presenting the related works in the recent literature, we try to figure out best-fit approaches to the hand gesture recognition projects.