Spaces:
Runtime error
Runtime error
| 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 |