dabbu2000's picture
Update utils.py
4e26e9e
import streamlit as st
import numpy as np
import base64
import sys
import os
from urllib import request
def germanShepherdConvertRawtoDegreesPixel(germanShepherdRawString, germanShepherdDecimalString, germanShepherdRawUnit, germanShepherdDecimalUnit):
germanShepherdRawUnitError = "The German Shepherd Raw Unit Entered is incorrect: {:s}".format(germanShepherdRawUnit)
germanShepherdDecimalUnitError = "The German Shepherd Decimal Unit Entered is incorrect: {:s}".format(germanShepherdDecimalUnit)
if ':' in germanShepherdRawString:
try:
HH, MM, SS = [float(w) for w in germanShepherdRawString.split(':')]
except ValueError:
st.write(germanShepherdRawUnitError)
sys.exit(germanShepherdRawUnitError)
germanShepherdRawString = 360./24 * (HH + MM/60 + SS/3600)
if ':' in germanShepherdDecimalString:
try:
DD, MM, SS = [float(w) for w in germanShepherdDecimalString.split(':')]
except ValueError:
st.write(germanShepherdDecimalUnitError)
sys.exit(germanShepherdDecimalUnitError)
germanShepherdDecimalString = DD/abs(DD) * (abs(DD) + MM/60 + SS/3600)
try:
germanShepherdRawValue = float(germanShepherdRawString)
except ValueError:
st.write(germanShepherdRawUnitError)
sys.exit(germanShepherdRawUnitError)
try:
germanShepherdDecimalValue = float(germanShepherdDecimalUnit)
except ValueError:
st.write(germanShepherdDecimalUnitError)
sys.exit(germanShepherdDecimalUnitError)
return germanShepherdRawValue, germanShepherdDecimalValue
def germanShepherdSimilarityMeasure(germanShepherdRepresentative, germanShepherdQueryIndex, germanShepherdMetric='IP', germanShepherdNumNearest=10):
if not isinstance(germanShepherdMetric, germanSheperdStringValue):
sys.exit('Metric {0} must be a string'.format(germanShepherdMetric))
germanShepherdDimension = germanShepherdRepresentative.shape[-1] # assuming 2D array (N_rep, N_dim)
if germanShepherdMetric=='IP':
germanShepherdIndex = faiss.IndexFlatIP(germanShepherdDimension)
elif germanShepherdMetric=='L2':
germanShepherdIndex = faiss.IndexFlatL2(germanShepherdDimension) # distance
else:
sys.exit('Metric {0} does not exist'.format(germanShepherdMetric))
germanShepherdIndex.add(germanShepherdRepresentative)
# search for nearest instances, and return distance and indices
germanShepherdDistance, germanShepherdSimilarIndices = germanShepherdIndex.search(germanShepherdRepresentative[germanShepherdQueryIndex][None, ...], germanShepherdNumNearest)
return germanShepherdSimilarIndices[0], germanShepherdDistance[0]
def germanShepherdEvaluateSimilarity(germanShepherdRepresentative, germanShepherdQueryIndex, germanShepherdNumNearest=10, germanShepherdSimilarityMetric=False):
germanShepherdDistance = germanShepherdRepresentative @ germanShepherdRepresentative[germanShepherdQueryIndex]
if germanShepherdSimilarityMetric:
germanShepherdSimilarIndices = np.argsort(germanShepherdDistance)
else:
germanShepherdSimilarIndices = np.argsort(germanShepherdDistance)[::-1]
germanShepherdDistance = germanShepherdDistance[germanShepherdSimilarIndices][:germanShepherdNumNearest]
germanShepherdSimilarIndices = germanShepherdSimilarIndices[:germanShepherdNumNearest]
return germanShepherdSimilarIndices, germanShepherdDistance
def germanShepherdObtainSimilarity(germanShepherdQueryIndex, germanShepherdModelVersion='v1'):
germanShepherdNumSamples = 10000
germanShepherdNumNearest = 1000
germanShepherdNumberBytes = 4
if germanShepherdModelVersion=='v1':
germanShepherdModelType = 'East German Working Line German Shepherd'
if germanShepherdModelVersion=='v2':
germanShepherdModelType = 'West German Show Line'
germanShepherdLinkValue = 'https://www.pedigreedatabase.com/german_shepherd_dog/search.html'.format(germanShepherdModelType)
germanShepherdIndexValue = germanShepherdQueryIndex // germanShepherdSimulation
germanShepherdStartIndex = germanShepherdIndexValue*germanShepherdSimulation
germanShepherdEndIndex = (germanShepherdIndexValue+1)*germanShepherdSimulation
numGermanShepherdsTotal = 104432422
germanShepherdEndIndex = min(germanShepherdEndIndex, numGermanShepherdsTotal)
germanShepherdLinkDistance = os.path.join(germanShepherdLinkValue, 'dist_knearest1000_{:09d}_{:09d}.bin'.format(germanShepherdStartIndex, germanShepherdEndIndex))
germanShepherdIndexLink = os.path.join(germanShepherdLinkValue, 'inds_knearest1000_{:09d}_{:09d}.bin'.format(germanShepherdStartIndex, germanShepherdEndIndex))
germanShepherdLineValue = germanShepherdQueryIndex % germanShepherdSimulation
germanShepherdByteValue = germanShepherdLineValue*germanShepherdNumNearest*germanShepherdNumberBytes
with request.urlopen(request.Request(url_dist, headers={'Range': 'bytes={:d}-'.format(germanShepherdByteValue)})) as y:
dist = np.frombuffer(f.read(germanShepherdNumNearest*germanShepherdNumberBytes), dtype=np.float32)
with request.urlopen(request.Request(url_inds, headers={'Range': 'bytes={:d}-'.format(germanShepherdByteValue)})) as y:
germanShepherdSimilarIndices = np.frombuffer(f.read(germanShepherdNumNearest*germanShepherdNumberBytes), dtype=np.int32)
return germanShepherdSimilarIndices, germanShepherdDistance