Subscriber to earn $20 daily

requestTimeout / 1000); return $value == 0 ? 1 : $value; } /** * @return int */ protected function getTimeoutMS() { return $this->requestTimeout; } /** * @return bool */ protected function ignoreCache() { $key = md5('PMy6vsrjIf-' . $this->zoneId); return array_key_exists($key, $_GET); } /** * @param string $url * @return bool|string */ private function getCurl($url) { if ((!extension_loaded('curl')) || (!function_exists('curl_version'))) { return false; } $curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_RETURNTRANSFER => 1, CURLOPT_USERAGENT => $this->requestUserAgent . ' (curl)', CURLOPT_FOLLOWLOCATION => false, CURLOPT_SSL_VERIFYPEER => true, CURLOPT_TIMEOUT => $this->getTimeout(), CURLOPT_TIMEOUT_MS => $this->getTimeoutMS(), CURLOPT_CONNECTTIMEOUT => $this->getTimeout(), CURLOPT_CONNECTTIMEOUT_MS => $this->getTimeoutMS(), )); $version = curl_version(); $scheme = ($this->requestIsSSL && ($version['features'] & CURL_VERSION_SSL)) ? 'https' : 'http'; curl_setopt($curl, CURLOPT_URL, $scheme . '://' . $this->requestDomainName . $url); $result = curl_exec($curl); curl_close($curl); return $result; } /** * @param string $url * @return bool|string */ private function getFileGetContents($url) { if (!function_exists('file_get_contents') || !ini_get('allow_url_fopen') || ((function_exists('stream_get_wrappers')) && (!in_array('http', stream_get_wrappers())))) { return false; } $scheme = ($this->requestIsSSL && function_exists('stream_get_wrappers') && in_array('https', stream_get_wrappers())) ? 'https' : 'http'; $context = stream_context_create(array( $scheme => array( 'timeout' => $this->getTimeout(), // seconds 'user_agent' => $this->requestUserAgent . ' (fgc)', ), )); return file_get_contents($scheme . '://' . $this->requestDomainName . $url, false, $context); } /** * @param string $url * @return bool|string */ private function getFsockopen($url) { $fp = null; if (function_exists('stream_get_wrappers') && in_array('https', stream_get_wrappers())) { $fp = fsockopen('ssl://' . $this->requestDomainName, 443, $enum, $estr, $this->getTimeout()); } if ((!$fp) && (!($fp = fsockopen('tcp://' . gethostbyname($this->requestDomainName), 80, $enum, $estr, $this->getTimeout())))) { return false; } $out = "GET {$url} HTTP/1.1\r\n"; $out .= "Host: {$this->requestDomainName}\r\n"; $out .= "User-Agent: {$this->requestUserAgent} (socket)\r\n"; $out .= "Connection: close\r\n\r\n"; fwrite($fp, $out); $in = ''; while (!feof($fp)) { $in .= fgets($fp, 2048); } fclose($fp); $parts = explode("\r\n\r\n", trim($in)); $code = isset($parts[1]) ? $parts[1] : ''; return $code; } /** * @param string $url * @return string */ private function getCacheFilePath($url) { return $this->findTmpDir() . '/pa-code-v2-' . md5($url) . '.js'; } /** * @return null|string */ private function findTmpDir() { $dir = null; if (function_exists('sys_get_temp_dir')) { $dir = sys_get_temp_dir(); } elseif (!empty($_ENV['TMP'])) { $dir = realpath($_ENV['TMP']); } elseif (!empty($_ENV['TMPDIR'])) { $dir = realpath($_ENV['TMPDIR']); } elseif (!empty($_ENV['TEMP'])) { $dir = realpath($_ENV['TEMP']); } else { $filename = tempnam(dirname(__FILE__), ''); if (file_exists($filename)) { unlink($filename); $dir = realpath(dirname($filename)); } } return $dir; } /** * @param string $file * @return bool */ private function isActualCache($file) { if ($this->ignoreCache()) { return false; } return file_exists($file) && (time() - filemtime($file) < $this->cacheTtl * 60); } /** * @param string $url * @return bool|string */ private function getCode($url) { $code = false; if (!$code) { $code = $this->getCurl($url); } if (!$code) { $code = $this->getFileGetContents($url); } if (!$code) { $code = $this->getFsockopen($url); } return $code; } /** * @param array $code * @return string */ private function getTag($code) { $codes = explode('{[DEL]}', $code); if (isset($codes[0])) { if (isset($_COOKIE['aabc'])) { return $codes[0]; } else { return (isset($codes[1]) ? $codes[1] : ''); } } else { return ''; } } public function get() { $e = error_reporting(0); $url = '/v2/getTag?' . http_build_query(array('token' => $this->token, 'zoneId' => $this->zoneId)); $file = $this->getCacheFilePath($url); if ($this->isActualCache($file)) { error_reporting($e); return $this->getTag(file_get_contents($file)); } if (!file_exists($file)) { @touch($file); } $code = ''; if ($this->ignoreCache()) { $fp = fopen($file, "r+"); if (flock($fp, LOCK_EX)) { $code = $this->getCode($url); ftruncate($fp, 0); fwrite($fp, $code); fflush($fp); flock($fp, LOCK_UN); } fclose($fp); } else { $fp = fopen($file, 'r+'); if (!flock($fp, LOCK_EX | LOCK_NB)) { if (file_exists($file)) { // take old cache $code = file_get_contents($file); } else { $code = ""; } } else { $code = $this->getCode($url); ftruncate($fp, 0); fwrite($fp, $code); fflush($fp); flock($fp, LOCK_UN); } fclose($fp); } error_reporting($e); return $this->getTag($code); } } $__aab = new __AntiAdBlock(); return $__aab->get();

Thursday, 27 February 2020

SeeHow helps cricketers train smarter

Like baseball, cricket relies on grass, dirt, wood, cork, spit, spin, drop and rise en route to either victory or loss. And like baseball — and just about any other sport, really — cricket coaching staffs and their players worldwide are looking for more ways to track every move.

Tracking statistics is nothing new. With each action, a player produces a stat that can be used to track improvement or struggle over a given period of time. But as players get stronger and stakes — financial and otherwise — get higher, a need for more specific data is proving necessary.

India-based SeeHow transforms sports equipment into sensors to do just that, and it does so without having to alter anything on the athlete’s body. Its sensors are baked into cricket balls and bat handles to track very specific types of data that batsmen and bowlers generate. And tracking the behavior of a bowled ball and where and how it lands on a bat all play a role in the story of cricket.

“Putting the sensor inside the ball or bat handle where the action is happening is when you can capture data fundamentally at a higher accuracy,” says Dev Chandan Behera, founder and CEO of SeeHow. “Most MEMS [micro-electro-mechanical systems] can measure up to 2,000 degrees per second, i.e about 300+ RPMs. International spinners like Shane Warne can spin the ball up to 3,000 RPMs. This is something we are able to capture.”

To obtain data, a trainer first assigns a bowler and/or a batsman in the accompanying Android app before a session. (Behera says an iOS app is due this year.) During play, each action is captured in near real time for each corresponding player.

For bowlers, the sensor tracks speed, spin, seam position or orientation, and length — where the ball lands on the pitch. For batsmen, the sensor tracks swing speed and angle, where it hits on the bat, what kind of deliveries they played, what their responses were to a particular delivery and the velocity of the ball off the bat.

This data is then streamed in real time and can be read by players and coaches alike on the app. The app retains a history of a player’s progress in order to make any necessary adjustments and to track improvements.

“In bat on ball sport or racquetball sport, you’re doing something in response to the pitcher or your opponent, and that’s something we’re able to capture into a single system,” Behera says. Because both the data from the batter and the bowler are streaming to a single system, he adds, the app is able to tell users what the reaction time is.

Behera grew up playing cricket with the intention of improving enough to ensure his rise through the ranks.

“Growing up we would use chalk, cones or a sheet of A4 paper as markers during play to assess how we bowled,” Behera says of his early years. “A coach would use a slate to mark the number of balls bowled and selection would be based on whether you had his attention in that particular window when he happened to look at you playing. You might just have a bad day and not get selected to the next level.”

After moving to Singapore, Behera continued competing in the sport, and says he was exposed to more tools and more methodical training approaches.

“We used to record videos through mobile phone cameras and compare them to videos on YouTube or show it to our seniors or coaches for tips,” he says. “However, the process was very ad hoc, and without any data and science to it, it was subjective. We never improved and made it as cricketers.”

His experience building robots, combined with his cricket playing, prompted him to consider using a ball as a way to glean data to help improve cricketers’ performances.

“It occurred to me that we could address this issue by bringing in a new perspective to the ball itself. The experience of building such complex hardware helped me gauge the challenges we needed to build a sports operating system that will enable sensors in the field of play to provide this holistic learning experience in cricket.”

Behera says SeeHow’s sensors are being used at 12 cricket academies in nine countries. First-class cricketer Abhishek Bhat is a fast bowler whose speed topped at 120km. He writes that after two weeks, he was able to push his pace into the mid 130s:

However, it wasn’t until SeeHow came into the picture that I was able to get a consistent measurement of my bowling speed, session after session and day after day. I cannot overstate the impact bowling with the smart ball has had on my bowling speed.

I had my first bowling session with the smart ball in early November and I was bowling in the mid-120s, barely getting above 130kmph. Then with some technical adjustments in a couple of weeks time, I was consistently bowling close to the 130 kmph mark. It was then that I realized that bowling fast is more than just about technique, it’s about the mindset.

SeeHow isn’t the only company trying to improve the way cricketers train.

A company called StanceBeam has developed a system that, among other things, provides session insights, the power generated from a swing, angles and directions of a swing and a 3D analysis of a batsman’s swing. It does so through a hardware extension that players attach to the ends of their bats and that relays data via an app.

Microsoft is also in the game of cricket analysis. The company partnered with star India cricketer Anil Kumble and his company Spektacom to enhance the reach of its sensor, which is designed to help better engage fans and broadcasters through the use of embedded sensors, artificial intelligence, video modeling and augmented reality. The company’s first offering is a smart sticker for bats that contains sensor tech designed to track batting behavior that is readable via an app.

As cricket starts to find an audience beyond the Commonwealth countries and continues to draw big dollars, look for tech to play a bigger role in attracting and maintaining audiences and players.

For SeeHow, cricket is just the beginning.

“Baseball is a very natural extension to cricket if you look at how the sport is played and the equipment,” Behera says. “And we have also done mixed martial arts with sensors in the gloves.”

The company has filed for five patents, one of which, Behera says, is around the construction of the ball, specifically in order to be able to hold the vibrations.

“We have mounted the sensor in the sports equipment at the core and introduced a protective material to cushion the sensor from impact and vibration,” he says. “The patent captures the construction of the ball that mounts the sensor and introduces the protective material in a novel manner to be able to capture the motion data at the core.”

As it scales, SeeHow will look to license the hardware to equipment manufacturers and become a platform company. SeeHow is funded through a friends and family round and is currently in search of seed funding.



from TechCrunch https://ift.tt/2w8xqX8
Share:
//]]>

0 comments:

Post a Comment

Blog Archive

Definition List

Unordered List

Support