Я пользуюсь данным методом:
https://stackoverflow.com/a/43206972/12623203
Но также как показывает практика, капча не нужна, для защиты от ботов, есть один банальный метод, который работает как часы:
Добавьте в форму input с name email и оберните его в div с display: none;, если в форме используется реальный email, дайте ему другой name. А со стороны сервера проверяйте на пустоту input с name email. Дело в том, что все боты анализируют форму и заполняют input'ы, если на сам input повесить display:none, то он его не заполнит, а если обернуть в скрытый div, то для клиентов он будет не видим и придет пустым на сервер, а вот боты его заполнят.
Возможно есть какие то умные боты, но за года 3 все попадались на такую глупую уловку.